Inheritance & Method Overriding BCIS 3680 Enterprise Programming

advertisement
Inheritance & Method Overriding
BCIS 3680 Enterprise Programming
Overview
Inheritance


How to create a subclass
Methods in super- and subclasses


Constructors

Method overriding

Abstract methods

Interfaces
2
Inheritance
If we are dealing with a group of objects that share certain
common traits while in the mean time each group sports some
uniqueness of its own, then we may consider creating a class
hierarchy, e.g.,



Different types of vehicles;
Different types of students.

A superclass is a general class that defines traits common to a
set of related classes (subclasses).

A subclasses inherits those common variables and methods
defined in the superclass. Each subclass has its own unique
traits in addition to the shared ones.
3
A Sample Vehicle Hierarchy

This hierarchy is depicted using a Unified Modeling Language (UML)
diagram.

In UML diagrams, hollow arrows point from the subclass to the
superclass.
4
Superclasses and Subclasses

A superclass can have multiple subclasses.

A subclass, in turn, can be the superclass of other subclasses.

A subclass can inherit directly from only one superclass.

All classes in Java ultimately inherit from the Object class.
5

The object class contains a toString() method. Therefore, we
can call the toString() method on all classes in Java, including
those we define.

For an object, this method typically returns the class name and the
object’s memory location.
Inheritance
The extends keyword

<access modifier> class <subclassName>
extends <superclassName>
public class Graduate extends Student
A subclass inherits the variables and methods of a superclass.

6
Constructors
The constructor in the superclass initializes variables that are
defined in the superclass.


Constructors are not inherited.

However, a subclass may have its own constructor(s).

Typically, a subclass constructor…
7

May call the constructor in the superclass to initialize inherited
variables, i.e., those defined in the superclass; and then it has
additional code to initialize those variables defined in the subclass.

May even initialized all variables (inherited or non-inherited) in its own
way.
Accessing Superclass Members

To access a variable or method in the superclass, use the
super keyword.

To access a variable – super.variableName

To access a method – super.methodName([args])

To access a constructor – super([args])

Notice when accessing a superclass constructor, no method name or
class name is needed, e.g, if Graudate inherits from Student:


8
Correct: super(i, n, g, m, gpa);
Incorrect: super.Student(i, n, g, m, gpa);
Adding New Members

It would be pointless if a subclass didn’t need any unique
variables and/or methods of its own.

Therefore, the subclass often adds its own variables.

It may add new methods and/or modify methods defined in the
superclass.

How a subclass modify superclass-defined methods:


It may add to the behaviors defined in the superclass version.
It may even change the behaviors entirely.
This is called method overriding. In other words, the version in
the subclass “overrides” the one defined in the superclass.

9
Method Overriding

When a method in a subclass has the same return type and
signature as a method in its superclass (in other words, they
have identical header), then the method in the subclass is said
to override the method in the superclass.

Note that even if a method is not overidden, it still is accessible
in the subclass by virtue of inheritance.

When called from an object of a subclass,
(e.g.,undergradObj.retrieveInfo()):


10
If the method is overridden, the version of that method that is defined
in the subclass is run.
If the method is not overriden, the version of that method that is
defined in the superclass is run.
Rules for Overriding

The return type must be the same for both the overriding and
overridden methods.

The parameter list must be exactly the same.

Static methods cannot be overridden.
11
Review: Overloading
12
Overloading vs. Overriding
Overloading
Overriding
Where
Within the same class
Between superclass and subclass
Purpose
To have various versions of
a method so that callers of
the method have flexibility
in using the method
To change or add to an action (method)
that is defined in the superclass so that
the method defines how the subclass
acts in its own way (as opposed to how
the superclass or other subclass would
act)
Method Name
Must be the same
Must be the same
Parameter List
Must be different
Must be the same
Return Data Type
Not relevant
Must be the same
13
Overriding
14
Polymorphism

A reference variable can refer to and be used to store objects of
types different from its own, as long as those types are
subclasses of its type.

For example, Undergrad and Graduate are subclasses
of Student. Therefore, all the following are legal:

Student s1 = new Student();

Student s2 = new Undergrad();

Student s3 = new Graudate();
15
Polymorphism


If you want to store 100 students sequentially in an array but
won’t be able to tell until run time whether a student is
undergraduate or graduate, then creating an array for
undergraduate and another for graduate…

Functionally fails the business requirements (sequential storage while
u/g status is random);

Coding wise is awkward.
You can declare the array as a Student array. Then in run
time, regardless of whether a student is undergraduate or
graduate, the object can be stored in the next available array
element.
16
17
Polymorphism

With each element, you can call a method (defined in the
superclass and possibly overriden in the subclasses) with the
same statement, regardless of the type of the object (undergrad
or graduate).
for (int i = 0; i < sa.length; i++)
{
sa[i].retrieveInfo();
}
18
Abstract Methods

Sometimes, each subclass carries out a particular behavior in very
different ways, but for some reasons (e.g., “polymorphism”), we want
to define the behavior as a method at the superclass level, even
though no specific code is possible due to the substantial variation
among the subclasses.

In this case, we simply place a method header in the superclass,
without method body.

Instead of the pair of curly braces and code contained within, we add only a
semicolon to the end of the parameter list.

Such a method is called an abstract method.

Each subclass is responsible for fleshing out how the method works.
In this case, the subclass implements (instead of “overrides”) the
abstract method.
19
Defining an Abstract Method

To declare a method as abstract, include the abstract
keyword in the method header, and end the header with a
semicolon:
accessModifier abstract returnType
methodName( [parameter list] );
public abstract writeThesis();

The semicolon at the end of the header indicates that the
method contains no code.

There are no opening and closing curly braces.
20
Abstract Classes

As long as there is one abstract method in a class, this class
becomes an abstract class.

To make a class abstract, add the abstract keyword in the
class header,
accessModifier abstract class ClassName
{ // class body }
public abstract class Student { ... }

You cannot instantiate (create) an object of an abstract class.
However, you can declare an object of that class.
21
Interface

If a subclass wants to be a concrete class (a class that can be
instantiated), then it must implement all abstract methods in the
abstract superclass.

This can be a bit rigid in scenarios where we want an abstract method
or a set of abstract methods to be implemented:

By only some but not all subclasses in an inheritance hierarchy;

By classes from various inheritance hierarchies. Despite being from different
hierarchies, these classes all display certain capabilities as suggested by the
abstract methods.

The solution is to group these abstract methods into a special class
called interface.

A interface name often contains the –able or –er/-or suffix.
22
Interface

If a class implements an interface, it fleshes out the behaviors
by implementing abstract methods contained in the interface.

With interfaces, we can say, “This, this, and this class should be
able to perform this set of actions, but we will let each of them
decide how it actually performs those actions.”

For example, a dog, a cat, and a parrot are very different
species, but they all can be a pet (being “petable”). However,
how each is actually “petable” differs.

Similarly, a dog, a cat, and a baby all are “adorable”. But we will
let each be “adorable” in his/her own ways.
23
24
25
Defining an Interface

An interface includes only abstract methods.

Syntax
[public] interface InterfaceName {
[public abstract] returnType1 methodName1
([parameterList1]);
[public abstract] returnType2 methodName2
([parameterList2]); … }

The applicable access modifier is either public or none.
26
Implementing Interfaces

A class can implement one or more interfaces.

An interface can be implemented by any number of classes.

Syntax:
<access modifier> class ClassName
[extends SuperClassName]
implements InterfaceName1, [interfaceName2, …]
27
Download