Interfaces and Abstract Classes CS 240 – Advanced

Published  . 0 views
↓ Download
Interfaces and Abstract Classes CS 240 – Advanced
1 / 1
Interfaces and Abstract Classes CS 240 – Advanced - slide 1 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 2 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 3 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 4 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 5 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 6 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 7 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 8 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 9 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 10 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 11 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 12 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 13 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 14 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 15 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 16 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 17 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 18 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 19 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 20 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 21 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 22 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 23 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 24 of 25 Interfaces and Abstract Classes CS 240 – Advanced - slide 25 of 25
Description: Interfaces and Abstract Classes CS 240 Advanced Programming Concepts Polymorphism Poly many Morph change Polymorphism many forms (we dont say many changes) Objects can take on many forms in an object-oriented program The form

Related Topics

Download Presentation

"Interfaces and Abstract Classes CS 240 – Advanced" is the property of its rightful owner. Permission is granted to download and print the materials on this website for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.

Presentation Transcript

slide1. Interfaces and Abstract Classes CS 240 – Advanced Programming Concepts<br>
slide2. Polymorphism Poly = “many”
Morph = “change”
Polymorphism = “many forms” (we don’t say many changes)
Objects can take on many forms in an object-oriented program
The form of the class in which they are declared
The form of any parent class in the class’ inheritance hierarchy
‘Object’ is a parent class whether declared or not (always at the top of the inheritance hierarchy)
The form is represented by the type of the reference that refers to the object
Reference and object types may differ (but must be compatible according to inheritance—’is a’)
Simple definition: A reference of one type referring to an object of a different type 2<br>
slide3. Simple Polymorphism Examples Employee emp = new Employee(); OK
Person emp = new Employee(); OK
Object emp = new Employee(); OK
Dog emp = new Employee(); NOT OK 3<br>
slide4. Result in Memory Person emp = new Employee(); 4 salary hireDate firstName lastName birthDate emp Person Part Employee Part 0x1A8F2 Although they still exist in memory, ‘hireDate’ and ‘salary’ cannot be accessed from the ‘emp’ reference<br>
slide5. Reasons for Polymorphism Would probably never create the simple version of polymorphism
Person emp = new Employee();
Get the same result (reference of one type referring to an object of another type) when you use either of the following:
Heterogeneous Collections
Collections (such as arrays or ArrayLists) of a parent type that contain children of different types
Polymorphic parameters
Parameters in a method call that expect a parent reference or object but receive a child of the expected type 5<br>
slide6. City Simulation Example Create a simulation of a city, using an inheritance hierarchy of vehicles
Will have different kinds of vehicles in the city that can all ‘go’
Will start the simulation by placing vehicles in an array and calling a ‘go()’ method

What type of polymorphism is this? 6<br>
slide7. Vehicle Inheritance Hierarchy 7<br>
slide8. Simulation Example 1 public class CitySimulation {
public void run() {
Vehicle [] vehicles = new Vehicle[6];
vehicles[0] = new Car();
vehicles[1] = new Car();
vehicles[2] = new Truck();
vehicles[3] = new Truck();
vehicles[4] = new Boat();
vehicles[5] = new Airplane();

for(int i = 0; i < vehicles.length; i++) {
vehicles[i].go()
}
}
} 8<br>
slide9. Problems No common code to inherit for ‘go()’ method (so what should we write?)
Even if there were common code, how would creators of subclasses know they need to override the ‘go() method?
Solution: Abstract Method (which requires an Abstract Class) 9<br>
slide10. Abstract Vehicle Class public abstract class Vehicle {
public abstract void go();
} 10<br>
slide11. Abstract Methods Require containing class to be abstract
Must be overridden in child classes unless the child is abstract
A way to say a class has a behavior that will be defined in the subclasses
Allows polymorphic method invocations of methods declared but not defined by the reference type 11<br>
slide12. Polymorphic Method Invocation AKA: Polymorphic Operation

Vehicle v = new Car();
v.go();

Allowable because…
Every class that has one or more abstract methods must be abstract
You can’t create an instance of an abstract class
So,
Vehicle references can only refer to vehicle’s non-abstract child classes, so anything a vehicle reference can refer to, will have a non-abstract go() method

Vehicle v = new Vehicle(); Illegal! 12<br>
slide13. Abstract Classes Cannot be instantiated
Can be used as reference types (polymorphism)
May have non-abstract methods
Don’t have to have abstract methods
Provide a guarantee:
If you have a non-null reference of an abstract type, it refers to an object that is not abstract and therefore has non-abstract implementations for all methods 13<br>
slide14. Simulation Example with Abstract Vehicle Class public class CitySimulation {
public void run() {
Vehicle [] vehicles = new Vehicle[6];
vehicles[0] = new Vehicle(); // Illegal if abstract
vehicles[1] = new Car();
vehicles[2] = new Truck();
vehicles[3] = new Truck();
vehicles[4] = new Boat();
vehicles[5] = new Airplane();

for(int i = 0; i < vehicles.length; i++) {
// Guaranteed to invoke a real (non-abstract) method
vehicles[i].go()
}
}
} 14<br>
slide15. Updated Requirements Simulation must also contain people and dogs 15<br>
slide16. How Do We Start the Simulation Now? Would like the people and dogs to start moving at the same time as the vehicles
Can we put ‘Person’ and ‘Dog’ objects in our Vehicle array?
Can we change the type of the array to ‘Object’ and then put them in?
Need polymorphism (heterogeneous collection) without inheritance 16<br>
slide17. Inheritance Hierarchy with Interfaces 17<br>
slide18. Interfaces Cannot be instantiated
Can be used as reference types (polymorphism)
Can be used as collection (array) types (polymorphism)
May NOT have non-abstract methods
All methods are abstract (with three exceptions in Java version 8 and later)
All methods are public (whether you declare them as public or not)
With one exception in recent Java version 8 and later
Provide same guarantee as abstract classes:
If you have a non-null reference of an interface type, it refers to an object that implements the interface and is not abstract and therefore has non-abstract implementations for all behaviors (methods) 18<br>
slide19. Interfaces (cont.) Can implement any number of interfaces and still subclass some other class
Breaks inheritance barrier of polymorphism
Provides a way to use polymorphism where an inheritance relationship does not exist
Examples:
Moveable m = new Car();
Moveable m = new Person();
Moveable m = new Dog();
Moveable m = new Moveable(); Illegal!
Moveable m = new Vehicle(); Illegal! 19<br>
slide20. Interfaces (cont.) Can have constant variables
All variables are public, static, and final
In Java 8 and Later:
Can have instance methods with bodies (must be declared as default)
default void myDefaultMethod() {…}
Can have static methods (with bodies)
Can have private methods (not inherited so only useful as helper methods to default methods) 20<br>
slide21. Simulation Example with Interface public class CitySimulation {
public void run() {
Moveable[] moveables = new Moveable[6];
moveables[0] = new Car();
moveables[1] = new Car();
moveables[2] = new Truck();
moveables[3] = new Truck();
moveables[4] = new Person();
moveables[5] = new Dog();

for(int i = 0; i < moveables.length; i++) {
moveables[i].go()
}
}
} 21<br>
slide22. Creating an Interface public interface Moveable {
public void go();
} 22<br>
slide23. Implementing an Interface public class Person implements Moveable {

public void go() {
// Code to make person go
}
} 23<br>
slide24. Implementing an Interface with An Abstract Class in Java public abstract class Vehicle implements Moveable {

} 24<br>
slide25. Extending a Class and Implementing Multiple Interfaces public class Employee extends Person implements Moveable, Comparable{

public void go() {
// Code to make person go
}

public int compareTo(Object obj) {
// Code to compare two employees
}
} 25<br>