Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ......
Transcript of Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ......
![Page 1: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/1.jpg)
20-02-18 1
InheritanceCh 6
© Dr. B. FraserSlides 9CMPT 213
![Page 2: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/2.jpg)
20-02-18 2
Topics
1) How can Java work with class inheritance?1) Creating subclasses
2) Accessing the base class
3) Overriding methods
4) Class hierarchies
5) Visibility
![Page 3: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/3.jpg)
20-02-18 3
Creating Subclasses
![Page 4: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/4.jpg)
20-02-18 4
Inheritance
● Inheritance:
– Ex: A dolphin is-a mammal.
● Dolphin inherits from mammal(subclass) (superclass)(derived) (base)
● Motivation: – Share code between base class and derived class.
– Properties of the base are inherited by the derived.
– ..
![Page 5: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/5.jpg)
20-02-18 5
Book Inheritance Example
Dictionary
- definitions : int
+ computeRatio() : double+ setDefinitions(numDefinitions : int) : void+ getDefinitions() : int
Book
- pages : int
+ setPages(numPages : int) : void+ getPages() : int
Client Code:
Dictionary web = new Dictionary();web.setPages(25);web.setDefinitions(2523);double r = web.computeRatio();
– Don't re-implement (or copy-and-paste) the code from Book into Dictionary.
– Makes maintaining shared Book-functionality easier.
● Why?..
![Page 6: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/6.jpg)
20-02-18 6
Notes on Inheritance Example
● Instantiating Dictionary does not..
– Dictionary object has all members from:
● the Book class (its superclass), and
● the Dictionary class
● Access:– Subclass may call/access..
of super class.
– Ex: Dictionary code can call public functions in Book.
– Base class cannot access members of derived class.
![Page 7: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/7.jpg)
20-02-18 7
Polymorphism via Class Inheritance
● Polymorphic references can refer to a class, or any derived class:
Phone x;x = new Phone();
// Reference to derived classCellPhone cell = new CellPhone();x = new CellPhone();
// Reference to derived-derived classSmartPhone smart = new SmartPhone();x = new SmartPhone();
// Cannot reference a base class..SmartPhone oops = new Phone();
Object
Phone
CellPhone
SmartPhone
![Page 8: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/8.jpg)
20-02-18 8
Overriding Methods
(Not overloading, overriding)
![Page 9: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/9.jpg)
20-02-18 9
super
● super: refers to..
● this: refers to current object, not superclass.
● Subclass's constructor can “call” superclass constructor:
public class SmartPhone extends Phone {int numGames = 0;
public SmartPhone () {super();
} public SmartPhone (int number, int games) {
super(number);numGames = games;
}}
..
..
![Page 10: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/10.jpg)
20-02-18 10
super Notes
● super() must be the..– If missing, super(); automatically added as first line
(unless using constructor chaining via this(...) )
● Constructor Chaining– Each subclass calls its superclass's constructor.
– Creates a chain of constructor calls.
– Ensures base-classes are..
(Except if base class calls a method which is overridden in derived class.)
– Can chain to constructors of current class using this()
![Page 11: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/11.jpg)
20-02-18 11
Chaining Constructors
● Ex: Chain constructors in current class, or super class.
public class Base {int count = 0;
public Base() {this(5);// Do anything...
}
public Base(int count) {this.count = count;// Do anything...
}}
public class Derived extends Base {private final double DEFAULT = 42.0;private double other;
public Derived(int count) {this(count, DEFAULT);// Do anything...
}
public Derived(int count, double other){
super(count);this.other = other;// Do anything...
}}
= DerivedConstructor
![Page 12: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/12.jpg)
20-02-18 12
Overriding
● Subclass can override a method of superclass if same signature as base:
– Same name
– Same argument # and types
public class Fruit {private String type;
public Fruit(String type) {this.type = type;
}public String getType() {
return type;}
}
public class DeluxeFruit extends Fruit {public DeluxeFruit(String type) {
super(type);}
@Overridepublic String getType() {
return "Deluxe " + super.getType();}
}
public static void main(String[] args) {Fruit apple = new Fruit("Apple");System.out.println(apple.getType());
Fruit deluxe = new DeluxeFruit("Apple");System.out.println(deluxe.getType());
}
Class: class ca.cmpt213.fruit.FruitType: AppleClass: class ca.cmpt213.fruit.DeluxeFruitType: Deluxe Apple
= DeluxeFruitExample
![Page 13: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/13.jpg)
20-02-18 13
Overriding Details
● To override a method, derived class's method must:– Have identical signature
– Not throw any extra checked exceptions (more later)
– ..
● Ex: Can go from protected to public, but not public to protected/private.
– Cannot override a private, a static, or a final method.
– Not change return type of method.
● But you can return a subtype of original return type
![Page 14: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/14.jpg)
20-02-18 14
final vs Overriding
● final method:..– In superclass:
public final String MCHammerSays() {return “Can't touch this.”;
}
– In subclass:public String MCHammerSays() {
return “Who's MC Hammer?”;}
● final class:..
..
![Page 15: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/15.jpg)
20-02-18 15
Shadow Variables - a Bad Idea
● Shadow Variables:– Subclass declares
a variable of the..
● ..only creates confusion for programmers!
– No good reason to use a shadow variable.
– Pick good, unique names!
public class Pet {private String name;// ...
}public class PetRock extends Pet {
private String name;// ...
}
![Page 16: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/16.jpg)
20-02-18 16
Class Hierarchies
![Page 17: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/17.jpg)
20-02-18 17
Multiple Inheritance
● Single Inheritance:A class may inherit from..
– Ex: A Car is a Vehicle.
– Java uses this approach.
● Multiple Inheritance:A class may inherit from many superclasses.
– Ex: A TA is both a Student and a Teacher.
● ..
– Impossible in Java (specifically forbidden).
● Use.. to get some benefits of multiple inheritance using only single inheritance.
![Page 18: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/18.jpg)
20-02-18 18
Inheritance Hierarchy
![Page 19: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/19.jpg)
20-02-18 19
Object
● All Java classes ultimately derive from the Object class.– If a class does not extend another a class,..
– If a class extends some other class, its superclass must ultimately derive from Object.
● Object's public methods are inherited by all classes.boolean equals(Object obj) // Is this same as obj
String toString() // Express as a string.
Object clone() // Return a copy of this obj.int hashCode() // For hashing collections
● Object has an implements for each, but a class may..with a more meaningful implementation.
![Page 20: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/20.jpg)
20-02-18 20
Abstract Class
![Page 21: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/21.jpg)
20-02-18 21
Abstract Classes
● Abstract class: (basic idea)
– Un-implemented method.Concrete derived classes must..
– Classes with abstract methods must be abstract.
– Abstract class cannot be instantiated:it's incomplete; not concrete.
● Make a class abstract: public abstract class Plant { ... }
● Make a method abstract:public abstract void doSomethingAmazing();
![Page 22: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/22.jpg)
20-02-18 22
Abstract Class ExampleAbstract class...
Abstract method has no implementation.
draw() and resize() must be..
abstract class GraphicObject { int x, y; ... void moveTo(int newX, int newY) { ... } abstract void draw(); abstract void resize();}
class Circle extends GraphicObject { @Override void draw() { ... } @Override void resize() { ... }} Example source: Java Tutorial.
..
..
..
![Page 23: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/23.jpg)
20-02-18 23
Abstract Class vs Interface
●
(non-abstract)
●
(non-constant fields)
● Extend classes
● Class can implement..
● In UML, abstract classes shown in italics.– Sometimes decorated with {abstract}
– Force derived concrete class to..
– Supports constants
Abstract class: Java interfaces:
Sim
ilar
itie
sD
iffe
ren
ces
In Java 8, interfaces can have default (“defender”)
methods, but these can only call other methods of
the interface.
![Page 24: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/24.jpg)
20-02-18 24
Abstract Questions● Can a method be both abstract and final?
–
● Can an abstract class have a static method?–
● Can a method be both abstract and static?–
● Can a class be both final and abstract?–
Note:Math is final with a private constructor.
![Page 25: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/25.jpg)
20-02-18 25
Visibility
![Page 26: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/26.jpg)
20-02-18 26
Indirect Access to Private Base Members
● Subclass cannot access superclass's private members.
● Can access anon-private method of the superclass, which..
public class Parent {private int amountWine = 100;protected void homeAlone() {
drinkWine(); // Call a private method.}
private void drinkWine() {amountWine--;
}}
class Child extends Parent {public void goodTimes() {
homeAlone(); //..drinkWine(); //..
}}
![Page 27: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/27.jpg)
20-02-18 27
protected
● protected– allows..
Crates a “protected” interface.
– unrelated classes cannot access the protected members.
● Not a great idea:
–
you have no control over which classes extend your class in the future.
– Create a “protected” interface to expose just those things that only derived classes will need (“template method”)Often better to use public interface.
![Page 28: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/28.jpg)
20-02-18 28
Class Member Visibility
● Visibility Modifies and member accessibility:– public:
– protected:
– default:
● default is without any modifiers; called package-private
– private:
Inside OwnClass
Inside Same Package
Inside Inherited Classes
Rest oftheworld
public Visible Visible Visible Visible
protected Visible Visible Visible
“default”
no modifier
Visible Visible
private Visible
anywhere
in the class, package, and derived classes
![Page 29: Inheritance · 20-02-18 8 Overriding Methods (Not overloading, overriding) 20-02-18 9 super ... Java Tutorial..... 20-02-18 23 Abstract Class vs Interface (non-abstract) (non-constant](https://reader035.fdocuments.us/reader035/viewer/2022062602/5ec7555329e4497d8c38a029/html5/thumbnails/29.jpg)
20-02-18 29
Summary
● Inheritance (is-a) used to create subclasses
● Child uses super in constructor
● Child overrides methods of parents to change behaviour
● Class hierarchies all start from Object, and each class may have at most one parent.
● Visibility modifiers affect inheritance