Every class that you create in Java extends the Object

advertisement
Chapter 11: Inheritance and
Polymorphism
11.2 Superclasses and Subclasses
Java is an object-oriented language. Everything (almost) is an object. What is an object? It is a collection
of data (properties) and code (methods).
Create a new project called Chapter11. Add the following code:
Object x = new Object();
This creates an Object. Look at x's methods by typing x followed by a period.
Now create a new class and add it to your project:
public class MyClass{
public MyClass()
{
}
}
Now add this code:
MyClass m = new MyClass();
Look at the properties and methods of m. They are the same as for x!
This is because all objects in Java inherit features from the Object superclass.
Every class that you create in Java is a subclass of the Object superclass.
Every class that you create in Java inherits features (properties and methods) from the Object
superclass.
Every class that you create in Java extends the Object superclass.
Inheritance allows programmers to re-use and extend existing classes.
Look at the toString(), hashcode(), and equals() methods.
Have your program print out the toString() and hashcode() values. One is in hex and the other is in
decimal. Convert the hex value to decimal:
Integer.toHexString(x.hashCode())
3/14/2016
Document1
1 of 5
They should be the same!
Consider an Employee class. There might be different information that you might want to keep track of
for different types of employees (e.g. salaried vs. hourly), but many things that all employees have in
common. The things that all employees have in common would go in the Employee class. The things that
apply only to salaried employees could go in a SalariedEmployee class that extends and inherits from the
Employee class. And the things that apply only to hourly employees could go in an HourlyEmployee class
that extends and inherits from the Employee class.
We might have an undergraduate student and a graduate student. Both have many things in common,
but we may want to keep track of a few different things for graduate students than we do for
undergraduate students. We could create a Student class that has all of the things that apply to all
students. The things that apply only to undergraduate students could go in an UndergraduateStudent
class that extends and inherits from the Student class. And the things that apply only to graduate
students could go in a GraduateStudent class.
An example from the textbook (11.2) is that of a geometric object. All geometric objects may have some
common features:



Is the object filled?
What color is the object?
When was the object created? (This is a stretch, I think)
However, a circle is different from a rectangle.
A circle is defined by its radius. A rectangle is defined by its length and width. While we would want to
know what color the circle is and whether it is filled or not, we do not need to know its length and
width.
And we might want to know what color a rectangle is and whether it is filled or not, we do not need to
know its radius.
We can use a GeometricObject class as a base class and we can extend it in one case to add a radius for a
circle and we can extend it in another case to add the length and width of a rectangle.
Look at the files (there are links to them on our home page):
 SimpleGeometricObject.java
 CircleFromSimpleGeometricObject.java
Note the keyword extends on the first line of the CircleFromSimpleGeometricObject definition. This tells
the compiler that the CircleFromSimpleGeometricObject class is based on the SimpleGeometricObject
class and that it extends it by adding those things that are required for a circle.
The SimpleGeometricObject class is called a base class. And the CircleFromSimpleGeometricObject class
is called a derived class. Sometimes (as in our textbook) the base class is called a super class and the
3/14/2016
Document1
2 of 5
derived class is called a subclass. I don't like these terms because a "super" class sounds "bigger" to me
than a "sub" class. But it's actually the other way around. A subclass, because it adds more features to
the super class, is "bigger" (has more code) than the super class. Base class and derived class just make
more sense to me.
Add the SimpleGeometricObject class and the CircleFromSimpleGeometricObject class to your Chapter
11 project.
Examine both files.
The keyword extends tells the compiler that we are extending (and inheriting from) the
SimpleGeometricObject class.
Look at the default constructor for the circle class.
Look at the first parameterized constructor for the circle class.
Try to set the value of color or filled from the constructor. You can't! They are private. However, you can
use the "set" methods to set their values, because the "set" methods are public.
In-class exercise
Write a Rectangle class that extends the SimpleGeometricObject class. You should be able to initialize it
with a length and width, determine its area.
11.3 Using the super Keyword
When in a derived (sub) class, use the word super to refer to the base (super) class. This is usually used
for:
1. To call a constructor in the base (super) class.
2. To call a method in the base (super) class.
To call a base (super) class constructor:
 super()
 super(parameter list)
When calling super, you must make it the first instruction in the constructor.
11.4 Overriding Methods
To override a method, the derived class must write a method with the same signature as the method in
the base class. The method in the base class cannot be declared as private. Anything that is declared to
be private is not visible outside of the file in which it is declared.
The book has an example of overriding a method on page 418 (Liang9).
3/14/2016
Document1
3 of 5
11.5 Overriding vs. Overloading
Overloading refers to having the same method name but with different parameter lists (different
signatures).
Overriding refers to having the same method name with the same parameter list, but in a derived (sub)
class.
The book has an example of overriding vs. overloading on page 419 (Liang9).
11.6 The Object Class and its toString() Method
All objects inherit from a single base class called the Object class. One of the Object class's methods is
the toString method. However, it doesn't do what you might expect. It merely gives the name of the
class, followed by an "at" symbol (@), followed by the memory address of the object. None of these are
useful. You should always write your own toString method.
11.7 Polymorphism
Skip for now.
11.8 Dynamic Binding
Skip for now.
11.9 Casting Objects and the instanceof Operator
Skip for now.
11.10 The Object's equals Method
11.11 The ArrayList Class
Skip this for now. It is in chapter 25.
11.12 A Custom Stack Class
Skip this for now. It is in chapter 25.
3/14/2016
Document1
4 of 5
11.13 The protected Data and Methods
11.14 Preventing Extending and Overriding
3/14/2016
Document1
5 of 5
Download