Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.
-
Upload
lucas-curtis -
Category
Documents
-
view
247 -
download
2
Transcript of Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.
![Page 1: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/1.jpg)
Introduction to Java 2 Programming
Lecture 6
Interfaces, Polymorphism
![Page 2: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/2.jpg)
Overview
• Interfaces
• Static Binding
• Dynamic Binding– Polymorphism
• Casting
• Exercises
![Page 3: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/3.jpg)
Interfaces
• Interfaces define a contract– Contain methods and their signatures– Can also include static final constants (and comments)– But no implementation
• Very similar to abstract classes• One interface can extend another, but
– An interface cannot extend a class– A class cannot extend an interface– Classes implement an interface
![Page 4: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/4.jpg)
Defining Interfaces
• Use the interface keywordpublic interface Vehicle {
public void turnLeft();
public void turnRight();
}
• Like abstract methods, the signature is terminated with a semi-colon
![Page 5: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/5.jpg)
Implementing Interfaces
• Use the implements keywordpublic class MotorBike implements Vehicle {//include methods from Vehicle interface}
• Class must implement all methods of the interface– OR declare itself to be abstract
• Classes can implement any number of interfacespublic class MotorBike implements Vehicle, Motorised
• Possible to combine extends and implementspublic class MotorBike extends WheeledVehicle
implements Vehicle, Motorised
![Page 6: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/6.jpg)
Benefits of Interfaces
• Cleanly separates implementation of behaviour from description of the behaviour– Means the implementation is easily changed
Vehicle vehicle = new MotorBike();// might become…Vehicle vehicle = new MotorCar();
• Many OO systems are defined almost entirely of interfaces– Describes how the system will function– The actual implementation is introduced later
![Page 7: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/7.jpg)
Overview
• Interfaces
• Static Binding
• Dynamic Binding– Polymorphism
• Casting
• Exercises
![Page 8: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/8.jpg)
Binding
• Binding is what happens when a method invocation is bound to an implementation– Involves lookup of the method in the class, or one or its
parents
– Both method names and parameters are checked
• Binding can happen at two different times– Compile time == static binding
– Run time == dynamic binding
![Page 9: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/9.jpg)
M otorBike
M otorBike b ike;
R e fe re n ce s O bje ct s
bike = new M otorBike() ;
M otorBike b ike2;
b ike2 = b ike;
![Page 10: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/10.jpg)
Static Binding
• References have a type– I.e. they refer to instances of a particular Java class
• Objects have a type– I.e. they are instances of a particular Java class– They are also instances of their super-class– Inheritance describes an isA relationship– E.g. a MotorBike isA MotorVehicle
• Static binding done by the compiler– When it can determine the type of an object
• Method calls are bound to their implementation immediately
![Page 11: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/11.jpg)
Static Binding Example 1
//class definition
public class MotorBike {
public void revEngine() {…}
}
//usage
MotorBike bike = new MotorBike();
motorbike.revEngine();
![Page 12: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/12.jpg)
Static Binding Example 2
public class MotorVehicle { public void start() {…} public void stop() {…}}public class MotorBike extends MotorVehicle(){ //overridden public void start() {…} public void revEngine() {…}}
//usage. Still statically boundMotorBike bike = new MotorBike();motorbike.start();
![Page 13: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/13.jpg)
Dynamic Binding
• Achieved at runtime– When the class of an object cannot be
determined at compile time– Means the JVM (not the compiler) must bind a
method call to its implementation
• Instances of a sub-class can be treated as if they were an instance of the parent class– Therefore the compiler doesn’t know its type,
just its base type.
![Page 14: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/14.jpg)
Dynamic Binding Example 1
//reference is to base classMotorVehicle vehicle = new MotorBike();
//method is dynamically bound to MotorBike start method
vehicle.start();
//remember all classes derive from ObjectObject object = new MotorBike();object.toString();
![Page 15: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/15.jpg)
Dynamic Binding Example 2public interface ElectricalAppliance { public void turnOn(); public void turnOff();}
public class RemoteControl() { public static void turnApplianceOn(ElectricalAppliance
appliance) { appliance.turnOn(); }}
ElectricalAppliance appliance = …;RemoteControl.turnApplianceOn(appliance);
![Page 16: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/16.jpg)
Dynamic Binding Example 2
public class HairDryer implements ElectricalAppliance {
}
public class Light implements ElectricalAppliance {}
ElectricalAppliance appliance = new HairDryer();RemoteControl.turnApplianceOn(appliance);
appliance = new Light();RemoteControl.turnApplianceOn(appliance);
![Page 17: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/17.jpg)
References and Behaviours
• The type of the object determines its possible behaviours– I.e. we define them in the class
• The object reference limits the behaviours we can invoke to those defined by the type of the reference
![Page 18: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/18.jpg)
Dynamic Binding Example 3
public class HairDryer implements ElectricalAppliance {
//other methods public void adjustTemperature();}
ElectricalAppliance appliance = new HairDryer();
//following won’t compileappliance.adjustTemperature();
![Page 19: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/19.jpg)
Dynamic Binding Summary
• Whenever a reference refers to an interface or a base class, methods are dynamically bound
• Method implementation determined at runtime• Dynamic Binding == Polymorphism
– Very powerful OO feature
• Allows the creation of “frameworks”– Applications that are implemented around interfaces,
but are customised by plugging in different implementations of those interfaces
– Very extensible
![Page 20: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/20.jpg)
Overview
• Interfaces
• Static Binding
• Dynamic Binding– Polymorphism
• Casting
• Exercises
![Page 21: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/21.jpg)
Checking an Objects Type
• Its possible to check the actual type of an object– May want to check the real type, if we’ve only
got a reference to an interface or base class
• Use the instanceof operator– Must be applied to an object, tests whether it
has a given type
![Page 22: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/22.jpg)
Instanceof Example
//class definitionpublic class MotorBike implements Vehicle, Motorised { … }
//code fragmentVehicle bike = new MotorBike();
if (bike instanceof MotorBike) {//do something}
if (bike instanceof Motorised) {//do something}
![Page 23: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/23.jpg)
Casting
• If we know the type, we can then “cast” the object
Vehicle bike = new MotorBike();
if (bike instanceof MotorBike) {
MotoBike bike = (MotorBike)bike;
}
• If the object isn’t of that type, then an exception will be thrown– Good idea to always check before casting, unless
you’re absolutely sure!
![Page 24: Introduction to Java 2 Programming Lecture 6 Interfaces, Polymorphism.](https://reader035.fdocuments.in/reader035/viewer/2022081720/551468f3550346414e8b5cb6/html5/thumbnails/24.jpg)
Overview
• Interfaces
• Static Binding
• Dynamic Binding– Polymorphism
• Casting
• Exercises