Download presentation
Presentation is loading. Please wait.
Published byJocelin Poole Modified over 9 years ago
1
CS102 – OOP_2 Inheritance, Polymorphism, Interfaces & Abstract classes. David Davenport
2
Abstract Classes & Methods Motivation Do not want to include instances of common (base) class in polymorphic collection Want guarantee all objects in a polymorphic collection include certain methods
3
Get into Shapes… A collection of Rectangles & Circles? CircleRectangle TwoDShape Ensure instances of TwoDShape cannot be added to collection {Rectangle}{Circle}{Rectangle} picture { ?? } { TwoDShape[] }
4
University People… Abstract vs. Concrete classes Person Student GradUnderGrad Staff AcademicNon-Academic SecretarialSecurityCleaning
5
Get into Shapes… Compute area of collection of shapes Circle +getArea() Rectangle +getArea() Triangle RightAngledIsoscelesEquilateral Polygon TwoDShape Need guarantee that all future classes implement getArea() Ensure instances of TwoDShape cannot be added to collection +getArea()
6
Abstract Classes (& methods) Abstract classes provide common parent which cannot be instantiated a guarantee sub-classes already have or must implement certain methods Create with keyword “abstract” e.g. public abstract class Media {…} (sub-class extends abstract class as normal) Can include Properties (& constructors!) Implemented methods Abstract methods (create with keyword “abstract” & no body) e.g. public abstract double getDuration();
7
The MusicCD Collection Object MusicCD DiscountCD CDCollection toString(), clone(), … title, artist, price, tracks getTitle(), getArtist(), getPrice(), getDuration() Discount setDiscount(-) getPrice() Set of MusicCD getValue() getTotalDuration()
8
The Media Hierarchy Object MusicCD DiscountCD Video Media Library DVD price, title, getPrice(), getTitle() {abst} getDuration() toString(), clone(), … artist, tracks getDuration() discount setDiscount(-) getPrice() length director getDuration() Set of Media getValue() getTotalDuration()
9
The Media Class public abstract class Media { String title; double price; public Media( String title, double price) { this.title = title; this.price = price; } public String getTitle() { return title; } public double getPrice() {return price; } public void setPrice( double newPrice) { price = newPrice; } public abstract int getDuration(); public String toString() { return title + "\t" + getPrice() + "\n"; } Declare as abstract - cannot be instantiated Can include constants, properties constructors!, implemented & abstract methods abstract method – look, no body! Class must be abstract if it includes abstract methods
10
The Video Class // Video // David, 23/3/02 public class Video extends Media { intlength; Stringdirector; public Video( String title, String director, int length, int price) { super( title, price); this.length = length; this.director = director; } public int getDuration() { return length; } public String getDirector() { return director; } public String toString() { return "VIDEO " + super.toString(); } Calls parent constructor Sub-class simply extends “abstract” parent as normal Implements required “abstract” method Overrides & reuses parent method
11
Interfaces Motivation Provides a form of multiple-inheritance Guarantee specified methods exist Powerful design approach!
12
Interfaces An interface is the boundary between two systems through which they connect/communicate Often standardised System A System B Advantage: can change either side without affecting the other! interface
13
Java Interfaces Declare with public interface X {…} restricted to constants & abstract methods only cannot be instantiated guarantees any implementing class has specified methods (else cannot be instantiated) Classes extend one class & implement interfaces e.g. public class U extends V implements X,Y,Z {…} Can view as a special form of class so class U is_a V, is_a X, is_a Y, is_a Z i.e. a form of multiple inheritance
14
Simple example… public interface Pointable { public boolean contains( int x, int y); } public class Circle extends TwoDShape implements Pointable { intradius; public Circle( int radius) { super(); this.radius = radius; } public int getRadius() { return radius; } public boolean contains( int x, int y) { // set result true iff x,y inside circle... return result; } Define interface with abstract method Define class that implements interface Required method... won’t compile if omitted
15
Another example… Multiple inheritance? Notebook is_a Computer is_a ElectricalDevice is_a NetworkedDevice ElectricCooker is_a Cooker is_a ElectricalDevice Microwave is_a Cooker is_a ElectricalDevice SmartPhone is_a Phone is_a Computer is_a NetworkedDevice Brain is_a Computer is_a BiologicalDevice GasCooker is_a Cooker is_a GasDevice
16
One soln with interfaces NotebookBrain ComputerElectricalDevice MicrowaveElectricCookerGasCooker Cooker
17
Another soln with interfaces NotebookBrain ComputerElectricalDevice MicrowaveElectricCookerGasCooker Cooker
18
{V} a Interfaces… as a form of multiple-inheritance {U} {V} {Y} {Z} {X} b V a; a = new V(); a = new U(); X b; b = new X(); b = new U(); b = a; b = (U) a; Y c; c = new U(); c = b; public class U extends V implements X, Y, Z c {Y} {U}
19
Interfaces class U extends class V implements interfaces X,Y,Z Class U is_a V & is_a X & is_a Y & is_a Z class V interface X interface Y class U extendsimplements interface Z V a; a = new U(); X b; b = (U) a; Y c; c = new U(); Cannot instantiate an interface, but can put an implementing class into it
20
Categorised Library… Object MusicCD DiscountCD Video Media Library price, title, getPrice() {abst} getDuration() set & getCategory() toString(), clone(), … artist, tracks getDuration() discount setDiscount(-) getPrice() length director getDuration() Set of Media getValue() getTotalDuration() listInCategory(cat) Simple: just add set/get category to base class…
21
The Categories Interface // Categories // David, 23/3/02 public interface Categories { public final String COMEDY = "COMEDY"; public final String ADVENTURE = "ADVENTURE"; public final String CRIME = "CRIME"; public final String NONFICTION = "NONFICTION"; public final String ROCK = "ROCK"; public final String POP = "POP"; public final String CLASSICAL = "CLASSICAL"; public String getCategory(); public void setCategory( String c); } Declare interface (instead of class) Can only include constants & abstract methods Methods abstract by default!
22
Media with Interface (1) Object MusicCD DiscountCD Video Media Library price, title, getPrice() {abst} getDuration() set & getCategory() toString(), clone(), … artist, tracks getDuration() discount setDiscount(-) getPrice() length director getDuration() Set of Media getValue() getTotalDuration() listInCategory(cat) Categories
23
The Media Class public abstract class Media implements Categories { // include all // properties, constructors & methods // as before.. // ********************************* // & add properties & methods // to implement Categories interface Stringcategory; public String getCategory() { return category; } public void setCategory( String c) { category = c; } // ********************************* } Class implements one or more interfaces by adding any necessary code
24
Media with Interface (2) Object MusicCD DiscountCD Video Media Library price, title, getPrice() {abst} getDuration() toString(), clone(), … artist, tracks getDuration() setCategory() getCategory() discount setDiscount(-) getPrice() length director getDuration() Set of ?Categories? getValue() getTotalDuration() listInCategory(cat) Categories CatVideo setCategory() getCategory()
25
Media with Interface (3) Moral: Design interfaces first! IMediaMedia ICategories Library - initially: set of IMedia - later: set of ICategories (a)(b)
26
Extending Interfaces (a) public interface IMedia { public int getPrice(); public int getDuration(); } public interface ICategories extends IMedia { public String getCategory(); public void setCategory( String c); } public class Library { ArrayList () items; public int getValue () {…} public int getTotalDuration() {…} } public class Library { ArrayList () items; public int getValue () {…} public int getTotalDuration() {…} public void listInCategory( cat) {…} } public abstract class Media implements IMedia { public int getPrice() {…} } public class Video extends Media { public int getDuration() {…} } public class CatVideo extends Video implements ICategories { public String getCategory() {…} public void setCategory( String c) {…} }
27
Media with Interface (3) Moral: Design interfaces first! ICategories IMediaMedia Library - initially: set of IMedia - later: set of ICategories IMediaICategories ICatMedia Library - initially: set of IMedia - later: set of ICatMedia (a)(b)
28
Extending Interfaces (b) public interface IMedia { public int getPrice(); public int getDuration(); } public interface ICategories { public String getCategory(); public void setCategory( String c); } public class Library { ArrayList () items; public int getValue () {…} public int getTotalDuration() {…} } public class Library { ArrayList () items; public int getValue () {…} public int getTotalDuration() {…} public void listInCategory( cat) {…} } public abstract class Media implements IMedia { public int getPrice() {…} } public class Video extends Media { public int getDuration() {…} } public class CatVideo extends Video implements ICatMedia { public String getCategory() {…} public void setCategory( String c) {…} } public interface ICatMedia extends IMedia, ICategories { }
29
Interface notes Can’t create objects of interface type, only a type that implements it Interfaces can extend interfaces (but not classes) to form a hierarchy separate from class one Start design with interfaces! Java provides “instanceof” operator to test object type (but use very sparingly) See also “getClass()”
30
Other notes… Method access modifiers protected vs. default (nothing specified) “default” is package access only “protected” is package, plus can be sub-classed from another package!
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.