Top Banner
Chapter 7 1 Inheritance Chapter 7
66

Inheritance - Purdue University

Jan 05, 2022

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Inheritance - Purdue University

Chapter 7 1

Inheritance

Chapter 7

Page 2: Inheritance - Purdue University

Chapter 7 5

Introduction 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.

Page 3: Inheritance - Purdue University

Chapter 7 6

Introduction 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.

Page 4: Inheritance - Purdue University

Chapter 7 7

Programming Example: A Base Class

• class Person

Page 5: Inheritance - Purdue University

Chapter 7 8

Derived Classes

• Consider a college record-keeping system with records about students, faculty and staff.

Page 6: Inheritance - Purdue University

Chapter 7 9

Derived Classes, cont.

Page 7: Inheritance - Purdue University

Chapter 7 10

Derived 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.

Page 8: Inheritance - Purdue University

Chapter 7 11

Derived Classes, cont.

• class Student is a derived class of class Personand class Person is called the base class.

Page 9: Inheritance - Purdue University

Chapter 7 12

Derived Classes, cont.• public class Student extends Person

Page 10: Inheritance - Purdue University

Chapter 7 14

Derived 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.

Page 11: Inheritance - Purdue University

Chapter 7 15

Derived Classes, cont.• class InheritanceDemo

Page 12: Inheritance - Purdue University

Chapter 7 17

Overriding 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.

Page 13: Inheritance - Purdue University

Chapter 7 18

Overriding Method Definitions, cont.

• When overriding a method, you can change the method definition to anything you wish, but you cannot change the method’s heading or the method’s return type.

Page 14: Inheritance - Purdue University

Chapter 7 19

Overriding 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

Page 15: Inheritance - Purdue University

Chapter 7 20

Overriding vs. Overloading, cont.

• example:public String getName(String title)

in class Student andpublic String getName()

in class Person overload method getNamesince the two methods have different parameter lists.

– Both methods are available in class Student.

Page 16: Inheritance - Purdue University

Chapter 7 23

Private 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.

Page 17: Inheritance - Purdue University

Chapter 7 24

Private 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.

Page 18: Inheritance - Purdue University

Chapter 7 25

Private 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.

Page 19: Inheritance - Purdue University

Chapter 7 31

Constructors 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.

Page 20: Inheritance - Purdue University

Chapter 7 32

Constructors in Derived Classes, cont.

• To call a constructor in the base class, usesuper(Values_for_Instance_Variables

_Declared_in_the_Base_Class);

• examplesuper(initialName);

notPerson(initialName); //ILLEGAL

Page 21: Inheritance - Purdue University

Chapter 7 33

Using 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.

Page 22: Inheritance - Purdue University

Chapter 7 34

Using super, cont.• equivalent definitions:

public Student(){

super();studentNumber= 0;

}

andpublic Student(){

studentNumber= 0;

}

Page 23: Inheritance - Purdue University

Chapter 7 35

The 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.

• examplethis(initialName, 0)

Page 24: Inheritance - Purdue University

Chapter 7 36

The 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.

Page 25: Inheritance - Purdue University

Chapter 7 37

Calling an Overridden Method

• super can be used to call a method in the base class that has been overridden in the derived class.

• examplesuper.writeOutput();

• However, you cannot repeat the use of superto invoke a method in some ancestor class other than the immediate base (parent) class.

Page 26: Inheritance - Purdue University

Chapter 7 45

An 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 Undergraduateis also an object of class Student and an object of class Person.

• A reference to an object of class Undergraduatecan be substituted for a reference to an object of class Student or a reference to an object of class Person.

Page 27: Inheritance - Purdue University

Chapter 7 47

An 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.

Page 28: Inheritance - Purdue University

Chapter 7 50

The 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.

Page 29: Inheritance - Purdue University

Chapter 7 51

The 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.

Page 30: Inheritance - Purdue University

Chapter 7 52

Method 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.

Page 31: Inheritance - Purdue University

Chapter 7 53

Method toString, cont.

• examplepublic String toString();{

return (“Name: “ + getName()+ \n+ “Number: “ + getNumber());

}

• Whenever a new class is created, a suitabletoString method should be defined.

Page 32: Inheritance - Purdue University

Chapter 7 54

Method toString, cont.

• Method toString can be called my the conventional means, Object_Name.toString, or by using only Object_Name.

• exampleSystem.out.println(s.toString());

orSystem.out.println(s);

Page 33: Inheritance - Purdue University

Chapter 7 70

Abstract Classes

• An abstract class is not intended to be used to create objects.

Page 34: Inheritance - Purdue University

Chapter 7 71

Abstract 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.

• examplepublic abstract void drawHere();

• A class that has at least one abstract method must be declared abstract.

Page 35: Inheritance - Purdue University

Chapter 7 73

Abstract Classes, cont.• class Figure

Page 36: Inheritance - Purdue University

Chapter 7 74

Abstract 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.

Page 37: Inheritance - Purdue University

Chapter 7 75

Interfaces

• An interface specifies the headings for methods that must be defined for any class that implements the interface.

Page 38: Inheritance - Purdue University

Chapter 7 76

Interfaces, cont.

• Interface Writeable

Page 39: Inheritance - Purdue University

Chapter 7 77

Interfaces, cont.

• To implement an interface, a class must– include the phraseimplements 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.

Page 40: Inheritance - Purdue University

Chapter 7 78

Interfaces, cont.• class WriteableUndergraduate

Page 41: Inheritance - Purdue University

Chapter 7 79

Interfaces, 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.

Page 42: Inheritance - Purdue University

Chapter 7 81

Dynamic 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 tare declared to be objects of type Figure.

Page 43: Inheritance - Purdue University

Chapter 7 82

Dynamic Binding, cont.

• Handling the invocation of a method that may be overridden later is called dynamic bindingor 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.

Page 44: Inheritance - Purdue University

Chapter 7 83

Dynamic Binding, cont.

• ConsiderFigure f;Box b = new Box(1, 4, 4);f = b;f.drawAt(2);Triangle t = new Triangle(1,2);f = t;f.drawAt(2);

Page 45: Inheritance - Purdue University

Chapter 7 84

Dynamic Binding, cont.

• Method drawAt is inherited from class Figureand 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.

Page 46: Inheritance - Purdue University

Chapter 7 90

Dynamic 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.

Page 47: Inheritance - Purdue University

Chapter 7 91

Polymorphism

• 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.

Page 48: Inheritance - Purdue University

Chapter 7 92

Subtle 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.

Page 49: Inheritance - Purdue University

Chapter 7 98

The Class JApplet

• An applet is a derived class from the class JAppletpublic 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.

Page 50: Inheritance - Purdue University

Chapter 7 99

The 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.

Page 51: Inheritance - Purdue University

Chapter 7 100

The Class JApplet, cont.

• The class JApplet is used as a base class to derive applets to run from a webpage.

Page 52: Inheritance - Purdue University

Chapter 7 101

The 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.

Page 53: Inheritance - Purdue University

Chapter 7 102

The Class Jframe, cont.

• class ButtonDemo

Page 54: Inheritance - Purdue University

Chapter 7 103

The Class Jframe, cont

class ShowButtonDemo

Page 55: Inheritance - Purdue University

Chapter 7 104

The Class JFrame, cont.

Page 56: Inheritance - Purdue University

Chapter 7 105

The 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.

Page 57: Inheritance - Purdue University

Chapter 7 106

The Class JFrame, cont.

• A class derived from JFrame has no initmethod, 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 sizesetSize(WIDTH, HEIGHT);

Page 58: Inheritance - Purdue University

Chapter 7 107

Window Events and Window Listeners

• With a JFrame, a GUI’s 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.

Page 59: Inheritance - Purdue University

Chapter 7 108

Window Events and Window Listeners, cont.

• A window listener is registered with a JFrameGUI using method addWindowListener.

Page 60: Inheritance - Purdue University

Chapter 7 109

Window Events and Window Listeners, cont.

• class WindowDestroyer

Page 61: Inheritance - Purdue University

Chapter 7 110

Window Events and Window Listeners, cont.

• A WindowDestroyer object is created and registered as a window listener for our JFrameGUI usingWindowDestroyer listener =

new WindowDestroyer();addWindowListener(listener);

• When the window-close button is clicked, theJFrame GUI ends.

Page 62: Inheritance - Purdue University

Chapter 7 111

The ActionListenerInterface

• 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.

Page 63: Inheritance - Purdue University

Chapter 7 112

Programming 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.

Page 64: Inheritance - Purdue University

Chapter 7 113

Programming Example: Smiley Face as a Jframe,

cont.• class HappyFace

Page 65: Inheritance - Purdue University

Chapter 7 114

Programming Example: Smiley Face as a Jframe,

cont.• class ShowHappyFace

Page 66: Inheritance - Purdue University

Chapter 7 115

Programming Example: Smiley Face as a Jframe,

cont.