Title: Inheritance
1Inheritance
2Objectives
- become acquainted with inheritance
- learn how to define and use derived classes
- learn about dynamic binding and polymorphism
- (optional) learn about the class JFrame used to
produce windowing interfaces
3Outline
- Inheritance Basics
- Programming with Inheritance
- Dynamic Binding and Polymorphism
- (optional) Graphics Supplement
4Inheritance Basics Outline
- Introduction to Inheritance
- Derived Classes
- Overriding Method Definitions
- Overriding vs. Overloading
- The final Modifier
- UML Inheritance Diagrams
5Introduction to Inheritance
- Inheritance allows us to define a general class
and then define more specialized classes simply
by adding new details to the more general class
definition. - A more specialized class inherits the properties
of the more general class, so that only new
features need to be programmed.
6Introduction to Inheritance, cont.
- example
- General class Vehicle might have instance
variables for weight and maximum occupancy. - More specialized class Automobile might add
instance variables for wheels, engine size, and
license plate number. - General class Vehicle might also be used to
define more specialized classes Boat and Airplane.
7Programming Example A Base Class
8Derived Classes
- Consider a college record-keeping system with
records about students, faculty and staff.
9Derived Classes, cont.
10Derived Classes, cont.
- Even though your program may not need any Person
or Employee objects, these classes can be useful
for consolidating and representing features
common to all subclasses. - For example, all students, faculty, and staff
have names, and these names may need to be
initialized, changed, retrieved, or printed.
11Derived Classes, cont.
- class Student is a derived class of class Person
and class Person is called the base class.
12Derived Classes, cont.
- public class Student extends Person
13Derived Classes, cont.
- syntax
- public class Derived_Class_Name extends
Base_Class_Name -
- Declarations_of_Added_Instance
- _Variables
- Definitions_of_Added_and_Overridden_Methods
14Derived Classes, cont.
- When you define a derived class, you declare only
the added instance variables and you define only
the added and overridden methods. - The variables and methods of the parent class
which are not declared private are inherited
automatically.
15Derived Classes, cont.
16Derived Classes, cont.
17Overriding Method Definitions
- Notice that class Student has a method
writeOutput with no parameters, and class Person
also has a method writeOutput with no parameters,
that class Student inherits. - When a derived class defines a method with the
same name and the same number and types of
parameters as a method in the base class, the
method in the derived class overrides the method
in the base class.
18Overriding Method Definitions, cont.
- When overriding a method, you can change the
method definition to anything you wish, but you
cannot change the methods heading or the
methods return type.
19Overriding vs. Overloading
- When you override a method, the new method
definition in the derived class has the same name
and the same number of types of parameters as the
method definition in the base class. - When the name is the same, but the number or
types of the parameters differs, whether in the
base class or in the derived class, the method is
overloaded in the derived class.
20Overriding vs. Overloading, cont.
- example
- public String getName(String title)
- in class Student and
- public String getName()
- in class Person overload method getName since
the two methods have different parameter lists.
- Both methods are available in class Student.
21The final Modifier
- You can prevent a method definition from being
overridden by adding the word final to the method
heading. - example
- public final void someMethod()
-
-
- This is used rarely, but it produces more
efficient code.
22The final Modifier, cont.
- An entire class can be declared final, in which
case it cannot be used as a base class to derive
another class.
23Private Instance Variables in the Base Class
- Private instance variables inherited from a base
class cannot be accessed directly. - Instead, they must be accessed using a method
that is not declared private. - While this may seem inconvenient, it provides an
important mechanism for controlling access and
changes to instance variables in the base class.
24Private Methods in the Base Class
- Like private instance variables, private methods
inherited from a base class cannot be accessed
directly. - Instead, they, too, must be accessed using a
method that is not declared private. - This, too, provides an important mechanism for
controlling access to methods in the base class.
25Private Methods in the Base Class
- Since private methods typically serve as helping
methods, their use always is limited to the class
in which they are defined.
26UML Inheritance Diagrams
- Typically, a UML class diagram shows only as much
as is needed for the design task at hand.
27UML Inheritance Diagrams, cont.
28UML Inheritance Diagrams, cont.
- An arrowhead points from a derived class to its
base class, indicating an is-a relationship. - For example, a Student is-a Person.
- Inherited instance variables and methods can be
found by following the arrowheads.
29UML Inheritance Diagrams, cont.
- more details of the inheritance hierarchy
30Programming with Inheritance Outline
- Constructors in Derived Classes
- (optional) The this Method
- Calling an Overridden Method
- (optional) A Subtle Point About Overloding and
Overriding - The class Object
- Abstract Classes
- Interfaces
31Constructors in Derived Classes
- A base class has its own constructors.
- Their purpose typically is to initialize the
instance variables declared in the base class. - A derived class has its own constructors.
- Their purpose typically is to call a constructor
in the base class, and then to initialize the
instance variables declared in the derived class.
32Constructors in Derived Classes, cont.
- To call a constructor in the base class, use
- super(Values_for_Instance_Variables
- _Declared_in_the_Base_Class)
- example
- super(initialName)
- not
- Person(initialName) //ILLEGAL
33Using super
- The call to the constructor in the base class
(using super) must be the first action taken in
the constructor of a derived class. - When no call to the constructor in the base class
is included, Java automatically includes a call
to the default constructor in the base class.
34Using super, cont.
- equivalent definitions
- public Student()
-
- super()
- studentNumber 0
-
- and
- public Student()
-
- studentNumber 0
35The this Method
- Within the definition of one constructor, it can
be appropriate to call another constructor in the
same class. - The keyword this is used to call another
constructor in the same class. - example
- this(initialName, 0)
36The this Method, cont.
- Any use of this must be the first action in the
constructor definition. - Thus, a constructor definition cannot contain a
call using super and a call using this. - To use both super and this, include a call using
this in one constructor and a call using super in
the constructor called using this.
37Calling an Overridden Method
- super can be used to call a method in the base
class that has been overridden in the derived
class. - example
- super.writeOutput()
- However, you cannot repeat the use of super to
invoke a method in some ancestor class other than
the immediate base (parent) class.
38Programming Example Multilevel Derived Classes
- Class Undergraduate can be derived from class
Student which is derived from class Person. - Class Undergraduate will have all the instance
variables and methods of class Student which has
all the instance variables and methods of class
Person.
39Programming Example Multilevel Derived Classes,
cont.
40Programming Example Multilevel Derived Classes,
cont.
41Programming Example Multilevel Derived Classes,
cont.
- A chain of derived classes permits code to be
reused which improves efficiency.
42Terminology
- A base class often is called a parent class.
- A derived class then is called a child class.
- A class that is a parent of a parent ofa parent
of (with one or more parent ofs) another class
often is called an ancestor class. - A class than is a child of a child ofa child of
(with one or more child ofs) often is called a
descendant.
43(optional) A Subtle Point About Overloading and
Overriding
- Even when two methods have the same number of
parameters, a difference in parameter type is
sufficient to qualify for overloading. - But, a reference to an ancestor class type can
refer to a descendant type. - Hence an overridden method in an ancestor class
sometimes needs to be invoked explicitly using
super.
44(optional) A Subtle Point About Overloading and
Overriding, cont.
45An Object Can Have More than One Type
- If class Undergraduate is derived from class
Student and class Student is derived from class
Person, then every object of class Undergraduate
is also an object of class Student and an object
of class Person. - A reference to an object of class Undergraduate
can be substituted for a reference to an object
of class Student or a reference to an object of
class Person.
46An Object Can Have More than One Type, cont.
- Given
- public static void compareNumbers (Student s1,
Student s2) - then either
- SomeClass.compareNumbers
- (studentObject, undergradObject)
- or
- SomeClass.compareNumbers
- (undergradObject, studentObject)
- could be used.
47An Object Can Have More than One Type, cont.
- However, a reference to an object of class person
cannot be substituted for a reference to an
object of class Student or an object of class
Undergraduate. - A reference to an object of an ancestor cannot be
substituted for a reference to an object of a
derived class.
48An Object Can Have More than One Type, cont.
- Hence, given
- public static void compareNumbers (Student s1,
Student s2) - neither
- SomeClass.compareNumbers
- (studentObject, personObject)
- nor
- SomeClass.compareNumbers
- (personObject, studentObject)
- could be used.
49Is a and Has a Relationships
- A derived class is a more specialized class than
its base class or any of its ancestor classes. - For example, a student is a person.
- A more complex object has as one or more of its
instance variables one or more references to
objects of a simple class, exhibiting a has a
relationship. - For example, a person has a name.
50The Class Object
- In Java, every class descends from (and inherits
features from) the Object class. - Therefore, every object of every class is of type
Object. - Unless a class is declared explicitly to be a
descendant of some other class, it is an
immediate descendant of the class Object.
51The Class Object, cont.
- An object of any class can substituted when a
parameter of type Object is expected. - Every class inherits some methods from the class
Object - equals()
- toString()
- but usually these methods are overridden by the
derived class or by an intermediate ancestor
class.
52Method toString
- Inherited method toString takes no arguments.
- Typically, method toString is coded to produce
and return a string which contains everything of
interest about the object.
53Method toString, cont.
- example
- public String toString()
-
- return (Name getName() \n
- Number getNumber())
-
-
- Whenever a new class is created, a suitable
toString method should be defined.
54Method toString, cont.
- Method toString can be called my the conventional
means, Object_Name.toString, or by using only
Object_Name. - example
- System.out.println(s.toString())
- or
- System.out.println(s)
55Method clone
- Method clone also is inherited from the class
Object. - Method clone takes no arguments and returns a
copy of the calling object. - Even though the data is identical, the objects
are distinct. - Typically, method clone needs to be overridden to
function properly. - See Appendix 8 for more details.
56Case Study Character Graphics
- Sometimes terminals, especially older ones, allow
only text output. - Well design three simple classes for simple
graphics using only text output. - One class will produce a box.
- One class will produce a triangle.
- One class will draw a pine tree using the other
two classes.
57Case Study Character Graphics, cont.
- Box and triangle figures will have an offset from
the edge of the screen. - A box figure will have a size, expressed as a
number of characters. - A triangle figure will have a size, given by its
base, with the sides determined automatically.
58Case Study Character Graphics, cont.
59Case Study Character Graphics, cont.
- A base class named Figure will provide the offset
property common to a box and a triangle and will
be used to derive class Box and class Triangle. - The base class Figure will set the parameters for
all figures and will draw the figures.
60Case Study Character Graphics, cont.
61Case Study Character Graphics, cont.
- To draw a box, top to bottom
- draw the top line
- draw the side lines
- draw the bottom line
62Case Study Character Graphics, cont.
63Case Study Character Graphics, cont.
- Each new method should be tested upon completion.
64Case Study Character Graphics, cont.
- To draw a triangle, top to bottom
- draw an inverted V
- draw a horizontal line for the base
65Case Study Character Graphics, cont.
66Case Study Character Graphics, cont.
67Case Study Character Graphics, cont.
- To complete the project, produce a driver.
68Case Study Character Graphics, cont.
class GraphicsDemo
69Case Study Character Graphics, cont.
70Abstract Classes
- An abstract class is not intended to be used to
create objects.
71Abstract Classes, cont.
- By declaring one or more methods to be abstract
and by omitting the method body, only objects of
derived classes which override the method(s) can
be instantiated. - example
- public abstract void drawHere()
- A class that has at least one abstract method
must be declared abstract.
72Abstract Classes, cont.
- example
- public abstract class Figure
-
73Abstract Classes, cont.
74Abstract Classes, cont.
- An abstract class serves as a placeholder.
- An abstract class makes it simpler to define
derived classes. - An abstract class assures that all its derived
classes implement its abstract method(s), or they
too will be abstract.
75Interfaces
- An interface specifies the headings for methods
that must be defined for any class that
implements the interface.
76Interfaces, cont.
77Interfaces, cont.
- To implement an interface, a class must
- include the phrase
- implements Interface_Name
- at the start of the class definition
- example
- implements MyInterface, YourInterface
- implement all the method headings listed in the
definition of the interface.
78Interfaces, cont.
- class WriteableUndergraduate
79Interfaces, cont.
- An interface is a type.
- A method may have a parameter of an interface
type. - Any class that implements the interface can be
substitute for the parameter. - A class can implement any number of interfaces by
providing implementations for all the methods of
all the interfaces it claims to implement.
80Dynamic Binding and Polymorphism Outline
- Dynamic Binding
- Type Checking and Dynamic Binding
- Dynamic Binding with toString
- Polymorphism
81Dynamic Binding
- Different objects can invoke different method
definitions using the same method name. - For example, if b references a Box and t
references a Triangle, b and t invoke different
definitions of method drawAt even if b and t are
declared to be objects of type Figure.
82Dynamic Binding, cont.
- Handling the invocation of a method that may be
overridden later is called dynamic binding or
late binding. - The type of object being referenced at the time
of the method call, not the type of reference
that was declared, determines which method is
invoked.
83Dynamic Binding, cont.
- Consider
- Figure f
- Box b new Box(1, 4, 4)
- f b
- f.drawAt(2)
- Triangle t new Triangle(1,2)
- f t
- f.drawAt(2)
84Dynamic Binding, cont.
- Method drawAt is inherited from class Figure and
is not overridden. - But, method drawHere is invoked within the
definition of method drawAt, and method drawHere
is overridden. - The type of object referred to by f determines
which method drawHere is invoked.
85Type Checking and Dynamic Binding
- Recall that an object reference to an ancestor
class can refer to an object of a descendant
class. - Employee e new Employee()
- Person p
- p e
- However, you can invoke only a method in class
Person with the variable p.
86Type Checking and Dynamic Binding, cont.
- However, if a method is overridden in the class
Employee, and variable p references an Employee
object, then the method in class Employee is
used. - The variable determines what methods can be used,
but the type referenced by the object determines
which definition of the method will be used.
87Type Checking and Dynamic Binding, cont.
- To use a method name in the class Employee with
an object named by the variable p of type Person,
use a type cast. - example
- Employee e (Employee)p
- e.setEmployeeNumber(5678)
88Type Checking and Dynamic Binding, cont.
- However, even a type cast cannot fool Java
- example
- Box b new Box (1, 4, 4)
- Figure f (Figure)b
- f. drawHere()
- will use the definition of drawHere given in
- class Box, not the definition of drawHere
- given in class Figure.
89Type Checking and Dynamic Binding, cont.
- You are unlikely to assign an object of a
descendant type to a variable of a parent type,
at least not directly. - But, such an assignment can occur indirectly by
providing an argument of a descendant type for a
method that has a parameter of an ancestor type.
90Dynamic Binding with toString
- Recall method toString typically is used to
prepare and return a string, describing an
object, for output to the screen. - The name of this method can be omitted, thanks to
dynamic binding, because one definition of method
println expects a single argument of type Object
which it uses to invoke the method toString
associated with the object.
91Polymorphism
- Polymorphism comes from Greek meaning many
forms. - In Java, polymorphism refers to the dynamic
binding mechanism that determines which method
definition will be used when a method name has
been overridden. - Thus, polymorphism refers to dynamic binding.
92Subtle Difference
- Dynamic binding refers to the process carried out
by the computer. - Polymorphism can be thought of as something
objects do. - Polymorphism, encapsulation, and inheritance, and
considered to be the main features of
object-oriented programming.
93(optional) A Better equals Method
- Sometimes method equals from class Object is
overloaded when it should have been overridden. - This occurs when its parameter is not of type
Object. - Usually, this is all right.
94(optional) A Better equals Method, cont.
- But, if method equals is called with an object of
class Object as its argument, method equals from
class Object will be invoked. - The problem is fixed by changing the formal
parameter in the overriding method so that it is
a parameter of type Object.
95(optional) A Better equals Method, cont.
- However, this allows the argument to be any type
of object, which can produce a run-time error. - But, we can determine if an object is of the
correct type using - Object instanceof Class_Name
- Finally, we should return false when comparing an
object to a null reference.
96(optional) A Better equals Method, cont.
97(optional) Graphics Supplement Outline
- The Class JApplet
- The Class JFrame
- Window Events and Window Listeners
- The ActionListener Interface
98The Class JApplet
- An applet is a derived class from the class
JApplet - public class LabelDemo extends JApplet
- Class JApplet has methods named init and paint.
- When you define methods init or paint in an
applet, you are overriding inherited methods.
99The Class JApplet, cont.
- Methods init and/or paint can be invoked without
having to (re)define them. - Thanks to polymorphism, methods init and/or paint
defined in an applet will be invoked by library
class methods and other methods when you run the
applet with the applet (of type JApplet) as the
parameter to the method.
100The Class JApplet, cont.
- The class JApplet is used as a base class to
derive applets to run from a webpage.
101The Class JFrame
- A Graphical User Interface or GUI is simply a
windowing interface for some kind of program. - The class JFrame, rather than the class JApplet,
is used to produce GUIs that can run as regular
Java applications.
102The Class Jframe, cont.
103The Class Jframe, cont
class ShowButtonDemo
104The Class JFrame, cont.
105The Class JFrame, cont.
- The class JFrame, and every class derived from
it, has a method named setVisible. - When its argument has the value true, the GUI is
visible. - Labels, buttons, JFrames, and other components
inherit method setVisible from a common ancestor.
106The Class JFrame, cont.
- A class derived from JFrame has no init method,
but it does use a constructor. - Code that would be in the init method of an
applet is placed in the constructor of the class
derived from JFrame. - A GUI derived from a JFrame sets an initial size
- setSize(WIDTH, HEIGHT)
107Window Events and Window Listeners
- With a JFrame, a GUIs close-window button needs
to be programmed. - A close-window button generates a window event
which is handled by a window listener. - Class WindowAdapter is a window listener, so
every class derived from class WindowAdapter is a
window listener.
108Window Events and Window Listeners, cont.
- A window listener is registered with a JFrame GUI
using method - addWindowListener.
109Window Events and Window Listeners, cont.
110Window Events and Window Listeners, cont.
- A WindowDestroyer object is created and
registered as a window listener for our JFrame
GUI using - WindowDestroyer listener
- new WindowDestroyer()
- addWindowListener(listener)
- When the window-close button is clicked, the
JFrame GUI ends.
111The ActionListener Interface
- The ActionListener interface has only one method
heading that must be implemented. - public void actionPerformed
- (ActionEvent e)
- A listener that responds to button clicks in an
applet or in a JFrame must implement the
ActionListener interface.
112Programming Example Smiley Face as a JFrame
- Class JFrame and every class derived from class
JFrame has a paint method. - The paint method can be redefined to draw a
figure.
113Programming Example Smiley Face as a Jframe,
cont.
114Programming Example Smiley Face as a Jframe,
cont.
115Programming Example Smiley Face as a Jframe,
cont.
116Summary
- You have become acquainted with inheritance.
- You have learned how to define and use derived
classes. - You have learned about dynamic binding and
polymorphism. - (optional) You have learned about the class
JFrame used to produce windowing interfaces.