Embed
Email

Inheritance

Document Sample
Inheritance
Shared by: HC11112419221
Categories
Tags
Stats
views:
0
posted:
11/24/2011
language:
English
pages:
73
Inheritance

 Another fundamental object-oriented technique is called

inheritance, which enhances software design and promotes

reuse



 We will focus on:

• deriving new classes

• creating class hierarchies

• the protected modifier

• polymorphism via inheritance

• inheritance used in graphical user interfaces







1

The Three Pillars of OOP

 The Three Pillars of OOP



 Encapsulation

 Inheritance

 Polymorphism



 Every class in Java extends some other class. If you don't

explicitly specify the class that your new class extends, it will

automatically extend the class named Object.









2

Class Hierarchy

 Java uses a class hierarchy to organize its classes.







 Thus, all classes in Java exist in a class hierarchy where the

class named Object forms the root of the hierarchy.







 Some classes extend Object directly, while other classes are

subclasses of Object further down the hierarchy.









3

Inheritance

 Inheritance allows a software developer to derive a new

class from an existing one





 The existing class is called the parent class, or superclass, or

base class





 The derived class is called the child class or subclass.









4

Inheritance

 As the name implies, the child inherits characteristics of the

parent.



 That is, the child class inherits the methods and data

defined for the parent class



 This means that you can write the code for one class

and have all its child classes have access to it.









5

Inheritance

 Inheritance relationships are shown in a UML class

diagram using a solid arrow with an unfilled triangular

arrowhead pointing to the parent class



Vehicle









Car





 Proper inheritance creates an is-a relationship, meaning

the child is a more specific version of the parent





6

Inheritance

 A subclass inherits state and behavior.







 Recall that an object’s state is reflected in the form of instance

variables and its behavior in the form of methods.







 The child inherits both from all of its ancestors.









7

Inheritance

 Child classes can use the items inherited from its parent or

super class as is, or the child class can modify or override

the methods of the parent class.



 This means that the child class can contain a method with

the same name as the parent class.









8

Inheritance

 A programmer can tailor a derived class as needed by

adding new variables or methods, or by modifying the

inherited ones



 Software reuse is a fundamental benefit of inheritance



 By using existing software components to create new ones,

we capitalize on all the effort that went into the design,

implementation, and testing of the existing software









9

Child Classes

 The method in the child class deals with the behavior

that is particular to the child class.



 We have a class SHAPE and SHAPE has a child class

RECTANGLE and a child class TRIANGLE.



 The SHAPE class will contain methods that are

common to both child classes, e.g. and Area() method



 Both child classes will have a method that calculates its

Area.



 Only the formulas for each Area calculation will differ.

10

Inheritance



 This leads to smaller and easier to understand systems.





 Using inheritance, common descriptions can be reused,

promoting the concept of code reusability.





 A child class can have a method with the same name as

the parent class only its method implements what it is

capable of doing.









11

Inheritance

 Inheritance cuts redundancy as descendant classes only

implement the extra information that differentiates them

from the parent class





 When changes are made on the common information, all

child classes automatically inherit it.



Thus the models that are created are easier to modify and

implement.



 In Java, the reserved word extends is used to establish an

inheritance relationship



12

Sub or Child Classes



 To declare a subclass you would write:



class subclass extends SuperClass { . . . } or,



class Dictionary extends Book{…}

 A Java class can have only one direct superclass.



 Member variables defined in the subclass hide member

variables of the same name in the superclass. Consider

this superclass and subclass pair:







13

Sub or Child Classes

class Super {

protected int num;

public Super(int anum){

num = anum;

}



class Sub extends Super {

float num1;



public Sub(int newnum, float Fnum) {

super(newnum)

num1 = Fnum;

}



14

Deriving Subclasses

 In Java, we use the reserved word extends to establish an

inheritance relationship



class Car extends Vehicle

{

// class contents

}





 See Words.java

 See Book.java

 See Dictionary.java





15

Controlling Inheritance

 Visibility modifiers determine which class members get

inherited and which do not





 Variables and methods declared with public visibility are

inherited, and those with private visibility are not





 But public variables violate our goal of encapsulation





 There is a third visibility modifier that helps in inheritance

situations: protected





16

The protected Modifier

 The protected visibility modifier allows a member of a

base class to be inherited into the child



 The protected visibility modifier provides more

encapsulation than public does.



 Encapsulation requires that we protect as much as possible

out instance variables from outside accesss.



 The details of each modifier are given in Appendix F







17

The protected Modifier

 The visibility modifiers determine which class members

get inherited and which do not.

 Variables and methods declared with public visibility

are inherited, and those with private visibility are

not.

 But public variables violate our goal of encapsulation.



 The protected visibility modifier allows a member to

be inherited, but provides more protection than

public does.





18

The super Reference



 Constructors are not inherited, even though they have

public visibility



 Yet we often want to use the parent's constructor to set up

the "parent's part" of the object



 The super reference can be used to refer to the parent

class, and is often used to invoke the parent's constructor



 See Words2.java (page 328)

 See Book2.java (page 329)

 See Dictionary2.java (page 330)

19

Class Diagram for Words





Book

# pages : int



+ pageMessage() : void









Words Dictionary

- definitions : int

+ main (args : String[]) : void

+ definitionMessage() : void









20

The Super Reference

 The super reference can be used to refer to the parent

class, and is often used to invoke the parent's constructor.



 In Words2.java, The Dictionary class uses the super

reference to call the parent constructor so that the number

of pages can be set.



 If it did not call the parent constructor, it would have to

initialize the number of pages in its own constructor. Let us

look at Words2.java







21

Super Reference

 When we create the constructor for a child class, we should

invoke the constructor for the superclass also.



 To do this, the first line of our constructor should contain

the keyword super followed by a parameter list as though

calling a method named super().



 The parameter list must match the parameters in the

argument list of the superclass constructor.e.g.

super(num_pages) // initializes the # of pages









22

Super Reference



 This causes the constructor for the superclass to be invoked

using parameters passed from the subclass.





 Thus memory is allocated for all the data in the super class.

The child class now has full access to it.









23

Inheritance

 The Dictionary class invokes the parent class constructor

with:

super(num_pages)

 Since the Dictionary class inherits the variable pages from

the parent class Book, it has to initialize this variable in its

constructor.

 But the parent class constructor already does this

initialization.



 Since constructors are not inherited, the Dictionary sub

class can use the super reference to invoke the parent class

constructor.

24

The Super Reference

 A child object inherits the allowable fields and methods of

its parent . The one duty of the default constructor is to

support this.





 Each instance of a child class inherits the specified

methods and variables of the parent class. So the parent

class’s instance variables must be properly initialized.









25

Inheritance and Constructors

 Every constructor has 3 tasks to perform:

1. Instantiate the parent object and initialize its

fields



2. Initialize any fields local to its class



3. perform the statements in the constructor

 If you do not call the parent constructor with super

when the super class constructor has parameters, then

the instance variables in the parent class will not be

initialized.

26

Defined vs. Inherited

 A subtle feature of inheritance is the fact that even if a

method or variable is not inherited by a child, it is still

defined for that child.

 An inherited member can be referenced directly in the child

class, as if it were declared in the child class





 But even members that are not inherited exist for the child,

and can be referenced indirectly through parent methods



 In Eating.Java, a pizza object is created that can access

private methods and variables in the parent class.





27

Overriding Methods

 A child class can override the definition of an inherited

method in favor of its own.



 This is different from the overloading that we used in

Constructors.



 That is, a child can redefine a method it inherits from its

parent.



 The new method must have the same signature as the

parent's method, but can have different code in the body







28

Overriding Methods

 See Messages.java

 See Thought.java

 See Advice.java



 Note that a parent method can be explicitly invoked using

the super reference









29

Overloading vs. Overriding

 Don't confuse the concepts of overloading and overriding



 Overloading deals with multiple methods in the same class

with the same name but different signatures



 Overriding deals with two methods, one in a parent class

and one in a child class, that have the same signature



 Overloading lets you define a similar operation in different

ways for different data



 Overriding lets you define a similar operation in different

ways for different object types

30

Overriding Methods



 A subclass can either completely override an inherited

method, or the subclass can enhance it.





 The subclass can use the keyword super to invoke the

version in the superclass.





 For instance, if have a method called deposit() in the child

class and a method called deposit() in the parent class, the

child class would call the parent method with:

super.deposit(45.00)



31

OverRiding

 The object type determines which method is invoked.

Savings_Account s = new Savings_Account(“Tom”);

Account b = new Account(“Bob”);



s.deposit(25.00); // defined in Savings_Account

b.deposit(25.00); // method defined in Account class



 Don't confuse the concepts of overloading and overriding









32

Overriding Methods



 To overload a method, you must duplicate the method

name, but use a different argument list.

 To override a method, you must match the entire method

signature.



 If you aren't careful when writing your new method

signature, you will be overloading methods when you think

that you are overriding them.



 This is a situation where you don't get any warnings from

the JDK compiler.





33

Overriding

 If a method is declared with the final modifier, it cannot

be overridden







 The concept of overriding can be applied to data and is

called shadowing variables







 Shadowing variables should be avoided because it tends to

cause unnecessarily confusing code







34

The super Reference Revisited

 A method in the parent class can be invoked explicitly using

the super reference





 The super reference can be used to invoke any method

from the parent class.



 This ability is often helpful when using overridden methods



 The syntax is:

super.method(parameters)



See Accounts.java



35

SubClasses



 When we extend an existing class, we 'inherit' all of the

attributes, and methods, of the parent class.



 In the Accounts.java program, the child class can deposit,

and withdraw - even though we only explicitly define a

new method for withdrawal.



 This makes programming much easier, and simpler, as we

don't re-invent the wheel each time we extend other

classes.



 In the example above, we add two new methods , and call

the constructor of our parent class.



36

Class Hierarchies

 Two children of the same parent are called siblings.



 Good class design puts all common features as high in

the hierarchy as is reasonable.



 Class hierarchies often have to be extended and modified

to keep up with changing needs



 There is no single class hierarchy that is appropriate for

all situations







37

Single vs. Multiple Inheritance

 Java supports single inheritance, meaning that a derived class

can have only one parent class



 Multiple inheritance allows a class to be derived from two or

more classes, inheriting the members of all parents



 Collisions, such as the same variable name in two parents, have

to be resolved



 In most cases, the use of interfaces gives us the best aspects of

multiple inheritance without the overhead





38

Class Hierarchies

 A child class of one parent can be the parent of another

child, forming class hierarchies





Business







RetailBusiness ServiceBusiness









KMart Macys Penny’s







39

The Object Class

 A class called Object is defined in the java.lang

package of the Java standard class library



 All classes are derived from the Object class



 If a class is not explicitly defined to be the child of an

existing class, it is assumed to be the child of the Object

class



 The Object class is therefore the ultimate root of all class

hierarchies





40

The Object Class

 The Object class contains a few useful methods, which are

inherited by all classes



 For example, the toString method is defined in the

Object class



 Every time we have defined toString, we have actually

been overriding it



 The toString method in the Object class is defined to

return a string that contains the name of the object’s class

and a hash value

41

Class Object

 The class Object defines the following methods:

• clone()

• equals(Object obj)

• finalize()

• getClass()

• hashCode()

• notify()

• notifyAll()

• toString()

• wait()

• wait(long timeout)

• wait(long timeout, int nanos)

 As you can see, this list includes three overloaded versions

of the method named wait (same name, different formal

argument lists).

42

Class Object

 Because every class is either a direct or indirect subclass of

Object, every class in Java, (including new classes that you

define), inherit these eleven methods.



 Generally speaking, many of these eleven methods are

intended to be overridden for various purposes.



 However, some of them, such as getClass, notify, and wait,

are intended to be used directly without overriding.









43

The Object Class

 That’s why the println method can call toString for

any object that is passed to it – all objects are guaranteed to

have a toString method via inheritance



 See Academia.java

See Student.java

 See GradStudent.java



 The equals method of the Object class determines if two

references are aliases



 You may choose to override equals to define equality in

some other way

44

References and Inheritance

 Assigning a predecessor object to an ancestor reference is

considered to be a widening conversion, and can be

performed by simple assignment



 Assigning an ancestor object to a predecessor reference can

also be done, but it is considered to be a narrowing

conversion and must be done with a cast



 The widening conversion is the most useful









45

Polymorphism

 What is polymorphism?



 The meaning of the word polymorphism is something like

one name, many forms.



 How does Java implement polymorphism?



 Polymorphism manifests itself in Java in the form of

multiple methods having the same name.









46

Polymorphism

 In some cases, multiple methods have the same name, but

different formal argument lists (overloaded methods).



 In other cases, multiple methods have the same name, same

return type, and same formal argument list (overridden

methods).



Three distinct forms of polymorphism

 Method overloading

 Method overriding through inheritance

 Method overriding through the Java interface





47

Polymorphism via Inheritance



 A polymorphic reference is one which can refer to different

types of objects at different times.



 Inheritance can also be used as a basis of polymorphism



 An object reference can refer to one object at one time,

then it can be changed to refer to another object (related by

inheritance) at another time









48

Polymorphism via Inheritance

 Suppose the Holiday class has a method called

celebrate, and the Christmas class overrode it



 Now consider the following invocation:



day.celebrate();



 If day refers to a Holiday object, it invokes the Holiday

version of celebrate; if it refers to a Christmas object,

it invokes the Christmas version







49

Inheritance



Accounts[] customer= new Accounts[10];



Senior_Savings Sam = new Senior_Savings(“Sam”);

customer[5] = Sam;

Accounts Ricky = new Accounts(“Ricky”);



customer[3] = Ricky;



So the array customer of class Accounts holds both Senior-

Savings and regular Accounts.



50

Polymorphism



 The Senior_Savings class overrides the Account class

method deposit with a deposit method of its own.

 We assign a position in the customer accounts array

(which is an array of Customer accounts) to a

Senior_Savings account.

 So the customer holds both regular customer accounts

and Senior_Savings accounts.



 The deposit method that is called depends on what type

of object is in the array.







51

Class Bank

public class Bank

{

public static void main(String args[]) {

Account [] customer = new Account[10];

for (int i=0; i< 3; i++) {

System.out.print ("Name of customer:);

String name = scan.next();

System.out.print ("Type of Account: S for Senior, R for regular ");

String type = scan.next();

acctype = type.charAt(0);

if(acctype == 'S'){

customer[i] = new Senior_Savings(Name, acctype, accountnumber++);

}

else if (acctype == 'R’)

customer[i] = new Account(Name, acctype, accountnumber++);

} // close for





52

Class Account

 When we call the deposit method in a loop , the deposit

method that is called depends on whether the object in the

array is of the Account class or the Senior_Savings class.

if(acctype == 'S')

{

customer[i] = new SeniorSavings(name, acctype, accnum++);

customer[i].deposit(45);

}

else if (acctype == 'R’)

{

customer [i] = new Account(name, acctype, acctnum++);

customer[i].deposit(75);

}



53

Polymorphism

 In general, it is the type of the object being referenced

determines which method is invoked.



 Objects of Thought class and Advice class are

instantiated. They both contain a method called message.



 Initially, they each call their respective methods. Then the

Thought object is assigned the value of the advice object.









54

Polymorphism

 When the message method is invoked by the Thought object,

the advice version is executed.



 Note that, if an invocation is in a loop, the exact same line of

code could execute different methods at different times.



 Polymorphic references are therefore resolved at run-time, not

during compilation









55

Polymorphism

 Note that, because all classes inherit from the Object

class, an Object reference can refer to any type of

object .



 A ArrayList is designed to store Object references

of any type.



 The instanceOf operator can be used to determine

the class from which an object was created









56

Variety. java

public static void main (String[] args) {

// create a vector called collector

ArrayList collector = new ArrayLIst();

// create an integer object num1

Integer num1 = new Integer (10);

collector.add(num1);



// create an point object, origin

Point origin = new Point (0, 0);

collector.add(origin);

// create an integer object and store it in the vector

Integer num2 = new Integer (37);

collector.add (num2);

57

Variety Program

 int temp;

Object someObject;

for (int count=0; count < 4; count++) {

someObject = collector.elementAt (count);

if (someObject instanceof Integer) {

temp = ((Integer)someObject).intValue() + 20;

System.out.println (something + " + 20 = " + temp);



} else

System.out.println ("Point: " + something);

}



} // method main



58

Variety.java

 In the Variety program, while iterating through a loop different

objects as assigned to an object which is defined as;



someObject = collector.elementAt(count);



if (someObject.instanceof Integer){



 Polymorphism means that the sender of a message does not

need to to be aware of which class the receiving object belongs

to.

 The receiving instance can belong to an any class





59

Polymorphism

 A sender object needs only to know that another object

can perform a certain behavior, not which class it

belongs to nor which operations will perform that

behavior.





 Flexible systems can thus be implemented.



 When a new object from a new class is added, this

modification should only affect this new object not those

who send messages to it









60

Indirect Access

 An inherited member can be referenced directly by name in

the child class, as if it were declared in the child class



 But even if a method or variable is not inherited by a child,

it can still be accessed indirectly through parent methods



 See FoodAnalysis.java (page 355)

 See FoodItem.java (page 356)

 See Pizza.java (page 357)









61

Final Methods

A final method cannot be overridden.





Declaring a method final prevents the derived class from

erroneously redefining a class method.





Declaring a method final allows the compiler to perform

inline optimization.





final classes cannot be extended.





62

Abstract Classes

 An abstract class is a placeholder in a class hierarchy that

represents a generic concept



 An abstract class cannot be instantiated



 We use the modifier abstract on the class header to

declare a class as abstract



 An abstract class often contains abstract methods (like an

interface does), though it doesn’t have to







63

Abstract Classes

 An abstract class is a placeholder in a class hierarchy that

represents a generic concept



 An abstract class cannot be instantiated

 We use the modifier abstract on the class header to

declare a class as abstract:



public abstract class Product

{

// contents

}



64

Abstract Classes



 An abstract class often contains abstract methods with

no definitions (like an interface)



 Unlike an interface, the abstract modifier must be

applied to each abstract method



 Also, an abstract class typically contains non-abstract

methods with full definitions



 A class declared as abstract does not have to contain

abstract methods -- simply declaring it as abstract makes

it so







65

Abstract Classes

 The child of an abstract class must override the abstract

methods of the parent, or it too will be considered abstract

 An abstract method cannot be defined as final or

static



 The use of abstract classes is an important element of

software design – it allows us to establish common elements

in a hierarchy that are too generic to instantiate









66

Interface Hierarchies



 Inheritance can be applied to interfaces as well as classes

 That is, one interface can be derived from another

interface

 The child interface inherits all abstract methods of the

parent

 A class implementing the child interface must define all

methods from both the ancestor and child interfaces

 Note that class hierarchies and interface hierarchies are

distinct (they do not overlap)





67

Abstract Classes

 The child of an abstract class must override the abstract

methods of the parent, or it too will be considered abstract



 An abstract method cannot be defined as final (because it

must be overridden) or static (because it has no definition

yet)



 The use of abstract classes is a design decision; it helps us

establish common elements in a class that is to general to

instantiate







68

Applets and Inheritance

 An applet is an excellent example of inheritance



 Recall that when we define an applet, we extend the

Applet class



 The Applet class already handles all the details about

applet creation and execution, including the interaction

with a web browser



 Our applet classes only have to deal with issues that

specifically relate to what our particular applet will do





69

Extending Event Adapter Classes

 The creation of listener classes is done by implementing a

particular interface (such as MouseListener interface)



 A listener can also be created by extending a special adapter

class of the Java class library



 Each listener interface has a corresponding adapter class

(such as the MouseAdapter class)



 Each adapter class implements the corresponding listener

and provides empty method definitions





70

Extending Event Adapter Classes

 When you derive a listener class from an adapter class, you

override any event methods of interest (such as the

mouseClicked method)



 Note that this avoids the need to create empty definitions

for unused events



 See OffCenter.java (page 360)









71

GUI Components

 A GUI component is an object that represents a visual

entity in an graphical user interface (such as a button or

slider)



 Components can generate events to which listener objects

can respond



 For example, an applet is a component that can generate

mouse events



 An applet is also a special kind of component, called a

container, in which other components can be placed

72

GUI Components

 See Fahrenheit.java (page 363)



 Components are organized into an inheritance class

hierarchy so that they can easily share characteristics



 When we define certain methods, such as the paint

method of an applet, we are actually overriding a method

defined in the Component class, which is ultimately

inherited into the Applet class



 See Doodle.java (page 367)

 See DoodleCanvas.java (page 369)

73


Related docs
Other docs by HC11112419221
E-Form
Views: 0  |  Downloads: 0
Kid
Views: 8  |  Downloads: 0
OAKS Online
Views: 3  |  Downloads: 0
MTBF MADE EASY
Views: 3  |  Downloads: 0
PROFESSIONAL DEVELOPMENT AND APPRAISAL SYSTEM
Views: 1  |  Downloads: 0
No Cellphones while Driving
Views: 0  |  Downloads: 0
By registering with docstoc.com you agree to our
privacy policy

You are almost ready to download!

You are almost ready to download!