| Objects, Classes, and Interfaces

## Creating Subclasses

> You declare that a class is the subclass of another class within The Class Declaration. For example, suppose that you wanted to create a subclass named SubClass of another class named SuperClass. You would write:

> >     class SubClass extends SuperClass {
> >         . . .
> >     }

> This declares that SubClass is the subclass of the Superclass class. It also implicitly declares that SuperClass is the superclass of SubClass. A subclass also inherits variables and methods from its superclass's superclass, and so on up the inheritance tree. For purposes of making our discussion easier, when this tutorial refers to a class's superclass it means the class's direct ancestor as well as all of its ascendant classes.

> A Java class can have only one direct superclass. Java does not support multiple inheritance.

> Creating a subclass can be as simple as including the `extends` clause in your class declaration (such as in the declaration in ImaginaryNumber above). However, you usually have to make other provisions in your code when subclassing a class, such as overriding methods.

> #### What Member Variables Does a Subclass Inherit?

> > Rule:A subclass inherits all of the member variables within its superclass that are accessible to that subclass (unless the member variable is hidden by the subclass).

> > That is, subclasses
> > - inherit those member variables declared as `public` or `protected`
> > - inherit those member variables declared with no access specifier as long as the subclass is in the same package as the superclass. These variables are sometimes known as "friendly".
> > - don't inherit a superclass's member variable if the subclass declares a member variable using the same name. The subclass's member variable is said to hide the member variable in the superclass.
> > - don't inherit `private` member variables

> #### Hiding Member Variables

> > As mentioned in the previous section, member variables defined in the subclass hide member variables of the same name in the superclass.

> > While this feature of the Java language is powerful and convenient, it can be a fruitful source of errors: hiding a member variable can be done deliberately or by accident. So, when naming your member variables be careful to only hide those member variables that you actually wish to hide.

> > One interesting feature of Java member variables is that a class can access a hidden member variable through its superclass. Consider this superclass and subclass pair:

> > >     class Super {
> > >         Number aNumber;
> > >     }
> > >     class Sub extends Super {
> > >         Float aNumber;
> > >     }

> > The `aNumber` variable in Sub hides `aNumber` in Super. But you can access `aNumber` from the superclass with:

> > >     super.aNumber

> > `super` is a Java language keyword that allows a method to refer to hidden variables and overriden methods of the superclass.

> #### What Methods Does a Subclass Inherit?

> > The rule that specifies which methods get inherited by a subclass is similar to that for member variables.

> > Rule:A subclass inherits all of the methods within its superclass that are accessible to that subclass (unless the method is overriden by the subclass).

> > That is, subclasses
> > - inherit those methods declared as `public` or `protected`
> > - inherit those methods declared with no access specifier as long as the subclass is in the same package as the superclass
> > - don't inherit a superclass's method if the subclass declares a method using the same name. The method in the subclass is said to override the one in the superclass.
> > - don't inherit `private` methods

> #### Overriding Methods

> > The ability of a subclass to override a method in its superclass allows a class to inherit from a superclass whose behavior is "close enough" and then supplement or modify the behavior of that superclass.

| Objects, Classes, and Interfaces