Sie sind auf Seite 1von 30

# Object-Oriented Programming

## Lecture 4: Interfaces & Inheritance

Dr. L H!ng Ph"#ng -- Department of Mathematics, Mechanics and Informatics, VNUH

July 2012
1

## Tuesday, July 31, 12

Content

Interfaces Inheritance

## Defining an interface Overriding and hiding

methods
Implementing an interface
Polymorphism
Using an interface as a type
Object as a super class
Rewriting interfaces
Final classes and methods

## Tuesday, July 31, 12

Defining an interface

## public interface GroupedInterface extends Interface1, Interface2, Interface3 {

// base of natural logarithms
double E = 2.718282;

// method signatures
void doSomething(int i, double x);

}

## If an interface is not declared public, it will be accessible only to

classes defined in the same package as the interface.

A class can extend only one other class, an interface can extend any
number of interfaces.

3

## Tuesday, July 31, 12

Implementing an interface
public interface Relatable {
public int isLargerThan(Relatable other);
}

## public class Person implements Relatable {

double weight;

public Person(double w) {

}
weight = w;
Implement the

public double getWeight() {
return weight;
required method
}
public int isLargerThan(Relatable other) {
Person person = (Person) other;
if (this.getWeight() < person.getWeight())
return -1;
else if (this.getWeight() > person.getWeight())
return 1;
else

}
return 0; Note the casting
}
4

## Tuesday, July 31, 12

Implementing an interface
public class RectanglePlus implements Relatable {
int width = 0;
int height = 0;
Point origin;

## public RectanglePlus(Point p, int w, int h) {

origin = p;
width = w;
height = h; Implement the
}
public int getArea() { required method
return width * height;
}
public int isLargerThan(Relatable other) {
RectanglePlus otherRect = (RectanglePlus) other;
if (this.getArea() < otherRect.getArea())
return -1;
else if (this.getArea() > otherRect.getArea())
return 1;
else
return 0;
}
}
5

## Tuesday, July 31, 12

Using an interface as a type

## If you define a reference variable whose type is an interface, any object

you assign to it must be an instance of a class that implements the
interface.
public Object findLargest(Object object1, Object object2) {
Relatable obj1 = (Relatable)object1;
Relatable obj2 = (Relatable)object2;
if ((obj1).isLargerThan(obj2) > 0)
return object1;
else
return object2;
}

## Tuesday, July 31, 12

Rewriting interfaces

## public interface DoIt {

void doSomething(int i, double x);
int doSomethingElse(String s);
}

Suppose that at a later time, you want to add a third method to DoIt:
public interface DoIt {
void doSomething(int i, double x);
int doSomethingElse(String s);
boolean didItWork(int i, double x, String s);
}

## Tuesday, July 31, 12

Rewriting interfaces

If you make this change, all classes that implement the old DoIt
interface will break because they dont implement the interface
anymore.

## You should create a DoItPlus interface that extends DoIt:

public interface DoItPlus extends DoIt {
boolean didItWork(int i, double x, String s);
}

Now users of your code can choose to continue to use the old interface
or upgrade to the new one.

## Tuesday, July 31, 12

Another example of interfaces
/** Describes any class whose objects can be measured. */
public interface Measurable {
/**
* Computes the measure of the object.
*
* @return the measure
*/
double getMeasure();
}

/** Describes any class whose objects can measure other objects. */
public interface Measurer {
/**
* Computes the measure of an object.
*
* @param anObject the object to be measured
* @return the measure
*/
double measure(Object anObject);
}
9

## Tuesday, July 31, 12

Content

Interfaces Inheritance

## Defining an interface Overriding and hiding

methods
Implementing an interface
Polymorphism
Using an interface as a type
Object as a super class
Rewriting interfaces
Final classes and methods

10

## Tuesday, July 31, 12

Inheritance
A class that is derived from another class is called a subclass (also a derived
class, extended class, child class).

## The superclass is also called base class or parent class.

In Java, excepting Object, every class has one and only one direct
superclass (single inheritance).

A subclass inherits all the members (fields, methods, and nested classes)
from its superclass.

## Constructors are not members, so they are not inherited by subclasses.

But the constructor of the superclass can be invoked from the subclass.
11

## Tuesday, July 31, 12

The Java platform class hierarchy

java.lang.Object is the
base class of all Java
objects.

## Classes near the bottom

of the hierarchy provide
more specialized
behavior.

12

## Tuesday, July 31, 12

An example of inheritance
class MountainBike extends Bicycle {

## // new fields and methods defining

// a mountain bike would go here

## MountainBike has the same fields

and methods as Bicycle.

13

## Tuesday, July 31, 12

class Bicycle {
The fields represent the
int cadence = 0; objects state.
int speed = 0;
int gear = 1;

}

## void changeGear(int newValue) {

The methods define its interaction
gear = newValue;
} with the outside world.

## void speedUp(int increment) {

speed = speed + increment;
}

## void applyBrakes(int decrement) {

speed = speed - decrement;
}

void printStates() {
+ gear);
}
}
14

## Tuesday, July 31, 12

An example of inheritance
public class MountainBike extends Bicycle {
public int seatHeight;

## public MountainBike(int startHeight, int startCadence,

int startSpeed, int startGear) {
seatHeight = startHeight;
}

## public void setHeight(int newValue) {

seatHeight = newValue;
}
}

15

## Tuesday, July 31, 12

Inheritance
A subclass inherits all the public and protected members of its parent, no matter what
the package the subclass is in.

If the subclass is in the same package as its parent, it also inherits the package-private
members of the parent.

If you declare a field in the subclass with the same name as the one in the
superclass --> hide it (not recommended)

If you write a new instance method that has the same signature as the one in the
superclass --> override it.

If you write a new static method that has the same signature as the one in the
superclass --> hide it.

16

## Tuesday, July 31, 12

Private members in a superclass

A subclass does not inherit the private member of its parent class.

## However, if the superclass has public or protected methods for

accessing its private fields, they can be used to access these fields.

A nested class has access to all the private members of its enclosing
class--both fields and methods.

17

## Tuesday, July 31, 12

Casting objects
The object myBike is of type MountainBike:

## A MountainBike is a Bicycle and is also an Object.

Casting shows the use of an object of one type in place of another type.

## Implicit casting: obj is both an Object and a MountainBike.

if (obj instanceof MountainBike) {
Explicit casting: MountainBike myBike = (MountainBike)obj;
} 18

## Tuesday, July 31, 12

Overriding and hiding methods
An instance method in a subclass with the same signature and return type
as an instance method in the superclass overrides the superclass method.

## This allows a class to inherit from a superclass whose behavior is

similar and then to modify behavior as needed.

## If a subclass defines a class method with the same signature as a class

method in the superclass, the method in the subclass hides the one in the
superclass.

Note that the access modifier for an overriding method can allow more,
but not less, access than the overridden method.
19

## Tuesday, July 31, 12

Overriding and hiding methods
public class Animal {
public static void testClassMethod() {
System.out.println("The class" + " method in Animal.");
}
public void testInstanceMethod() {
System.out.println("The instance " + " method in Animal.");
}
}

## public class Cat extends Animal {

public static void testClassMethod() {
System.out.println("The class method" + " in Cat.");
}
public void testInstanceMethod() {
System.out.println("The instance method" + " in Cat.");
}
public static void main(String[] args) {
Cat myCat = new Cat();
Animal myAnimal = myCat;
Animal.testClassMethod();
myAnimal.testInstanceMethod();
} The class method in Animal.
} The instance method in Cat. 20

## Tuesday, July 31, 12

Polymorphism

Subclasses of a class can define their own unique behaviors and yet
share some of the same functionality of the parent class.

## Suppose that we have a base class Person and three subclasses

Vietnamese, English and French.
public class Person { class English extends Person {
public void sayHello() { @Override
System.out.print("I will say: "); public void sayHello() {
} super.sayHello();
} System.out.println("Hello!");
}
}
class Vietnamese extends Person {
@Override class French extends Person {
public void sayHello() { @Override
super.sayHello(); public void sayHello() {
System.out.println("Xin cho!"); super.sayHello();
} System.out.println("Bonjour!");
} }
} 21

## Tuesday, July 31, 12

Polymorphism
public class TestPerson {
public static void main(String[] args) {
The Java virtual machine calls the
Person p0, p1, p2; appropriate method for the object
p0 = new Vietnamese();
p1 = new English();
that is referred to in each variable.
p2 = new French();
p0.sayHello(); This is virtual method invocation, an
p1.sayHello();
p2.sayHello(); important aspect of polymorphism.
}
}

## I will say: Xin cho!

I will say: Hello!
I will say: Bonjour!

22

## Tuesday, July 31, 12

Object as a superclass

## Some important methods of Object that we may want to inherit:

protected Object clone() throws CloneNotSupportedException;
public boolean equals(Object obj);
protected void finalize() throws Throwable;
public int hashCode();
public String toString();

23

## Tuesday, July 31, 12

Writing final classes and methods
You can declare some or all of a classs methods final.

## This indicates that the method cannot be overridden by subclasses.

You make a method final if it has an implementation that should not be changed and
is critical to the consistent state of the object.
class ChessAlgorithm {
enum ChessPlayer {WHITE, BLACK}
//...
final ChessPlayer getFirstPlayer() {
return ChessPlayer.WHITE;
}
//...
}
Methods called from constructors should be declared final.

24

## Tuesday, July 31, 12

Abstract methods and classes
An abstract class is a class declared abstract. It may or may not include
abstract methods.

## If a class includes an abstract method, that class must be abstract:

public abstract class GraphicObject {
// declare fields
// declare non-abstract methods
abstract void draw();
}

## If a subclass of an abstract class does not provide implementations for all

abstract methods in its parent class, it has to also be declared abstract.
25

## Tuesday, July 31, 12

Abstract class versus interfaces

Unlike interfaces, abstract classes can contain fields that are not static
and final and they can contain implemented methods.

implementation.

26

## Tuesday, July 31, 12

An abstract class example
In an object-oriented drawing application, you can draw many different
graphic objects.

They all have certain states (position, orientation, line color, fill color...) and
behaviors (moveTo, rotate, resize, draw...).

Some of these states and behaviors are the same for all objects: position,
fill color, moveTo.

27

## Tuesday, July 31, 12

An abstract class example
abstract class GraphicObject { class Circle extends GraphicObject {
int x, y; void draw() {
// ... //...
void moveTo(int newX, int newY) { }
//... void resize() {
} //...
abstract void draw(); }
abstract void resize(); }
}
class Rectangle extends GraphicObject {
void draw() {
//...
}
void resize() {
//...
}
}

28

Reference

## Trail: Learning the Java language

http://docs.oracle.com/javase/tutorial/java/TOC.html

29

## Tuesday, July 31, 12

Exercise

Exercise 1. Consider the Card, Deck and DisplayDeck classes that you
wrote in a previous exercise (previous lectures).

30