32
1 Inheritance in Java CS 3331 Fall 2009

1 Inheritance in Java CS 3331 Fall 2009. 2 Outline Overloading Inheritance and object initialization Subtyping Overriding Hiding

Embed Size (px)

Citation preview

Page 1: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

1

Inheritance in Java

CS 3331

Fall 2009

Page 2: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

2

Outline

Overloading Inheritance and object initialization Subtyping Overriding Hiding

Page 3: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

3

Overloading of Methods and Constructors

Def. Overloading The ability to allow different methods or constructors

of a class to share the same name.

public class Point { public Point() { /* … */ } public Point(int x, int y) { /* … */ } public double distance(Point other) { /* … */ } public double distance(int x, int y) { /* … */ } public double distance() { /* … */ } // …}

constructoroverloading

methodoverloading

Page 4: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

4

Overloading (Cont.)

Which overloaded method to invoke?Resolved at compile-time with signature matching,

where signature is name and parameter types.

Constructors/Methods Signatures1: Point() Point()2: Point(int x,int y) Point(int,int)3: double distance(Point other) distance(Point)4: double distance(int x,int y) distance(int,int)5: double distance() distance()

Point p1 = new Point(); // which constructor?Point p2 = new Point(10,20);p2.distance(p1); // which method?p2.distance(20,30);p2.distance();

Page 5: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

5

When to Overload?

When there is a general, nondiscriminative description of the functionality that fits all the overloaded methods.

public class StringBuffer { public StringBuffer append(String str) { /* … */ } public StringBuffer append(boolean b) { /* … */ } public StringBuffer append(char c) { /* … */ } public StringBuffer append(int i) { /* … */ } public StringBuffer append(long l) { /* … */ } // …}

Page 6: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

6

When to Overload? (Cont.)

When all the overloaded methods offer the same functionality, with some of them providing default arguments.

public class String { public String substring(int i, int j) { // base method: return substring from index i to j - 1. } public String substring(int i) { // provide default argument return substring(i, length()); } // …}

Page 7: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

7

Outline

Overloading Inheritance and object initialization Subtyping Overriding Hiding

Page 8: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

8

Inheritance Inheritance models the is-a relationship. If class S extends class T, then all objects of S

can act-like an object of T. Only single inheritance is allowed among

classes. All public and protected members of a

superclass are accessible in the subclasses.*

*All protected members are also accessible within the package.

Page 9: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

9

Constructors of Subclasses

Can invoke a constructor of the direct superclass. super(…) must be the first statement. If the super constructor call is missing, by

default the no-arg super() is invoked implicitly.

Can also invoke another constructor of the same class. this(…) must be the first statement.

Page 10: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

10

Example of “this” Callspublic class Point { private int x, y;

public Point(int x, int y) { this.x = x; this.y = y; }

public Point() { // default constructor this.x = 0; this.y = 0; }}

this(0,0);

Page 11: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

11

Example of “super” Callspublic class ColoredPoint extends Point { private Color color;

public ColoredPoint(int x, int y, Color color) { this.x = x; this.y = y; this.color = color; }

public ColoredPoint(int x, int y) { this(x, y, Color.BLACK); // point with default value }

public ColoredPoint() { color = Color.BLACK; // what will be the values of x and y? } }

super(x,y);

Point

-x: int-y: int

+Point()+Point(x: int, y: int)

Page 12: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

12

Default Constructor

public ClassName() { super(); }

Q. What would be the use of default constructor?

If no constructor is defined, the following form of no-arg default constructor is automatically generated by the compiler.

Page 13: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

13

Execution Order of Constructors

public class T { int x = 10; // 1: first

public T() { x = 20; // 2: second } // ...}

Rule: Superclass first and field initialization first - Instance variable initializer vs. instance initializer (or initialization block)

Example: S x = new S();

public class S extends T { int y = 30; // 3: third

public S() { super(); y = 40; // 4: fourth } // ... }

Page 14: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

14

Exercise

class Super { protected int x = 100;}

class Sub extends Super { { x = 200; }

public static void main(String[] args) { System.out.println(new Sub().x); }}

What value will be printed and why?

Page 15: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

15

Exercise

class ClassRoom extends Room { private int capacity = 60; public ClassRoom(int c) { capacity = c; } public ClassRoom(int n, int c) { super(n); } { if (number % 2 == 1) capacity *= 2; }}

What are the room number and capacity of the following two objects, respectively?ClassRoom c1 = new ClassRom(100);

ClassRoom c2 = new ClassRoom(300, 100);

class Room { private int number = 100; public Room() { this(++nextNum); } public Room(int n) { number = n; } private static int nextNum = 100; static { nextNum += 100; } { number += 2; }}

Page 16: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

16

Outline

Overloading Inheritance Subtyping Overriding Hiding

Page 17: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

17

Types What’re types?

Sets of values Why types?

To statically detect program errors, called type errors. Typed- vs. untyped-languages (also, static vs.

dynamic typing) Types in Java

Primitive types (e.g., boolean, int, long, etc.) Classes (e.g., Object, String, etc.) Interfaces (e.g., Runnable, List, etc.) Array types (e.g., int[], Object[], List[][], etc.)

Page 18: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

18

Subtyping What’s subtyping?

Subset relationship among types (e.g., Manager is a subtype (or subset) of Employee)

Subtype’s values are legitimate values of supertypes. Why subtyping?

Can organizes types into hierarchy, called subype hierarchy Can extend programs by adding subtypes

Subtyping in Java Between classes (subclassing) Between interfaces (subinterfacing) Between classes and interfaces (implementation or

realization) Between arrays

Page 19: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

19

Substitution Property Def. Substitution property

A value of subtype can appear where a value of its supertype is expected, e.g., in arguments, results, receivers, and assignments.

// 1. argument // public void register(Student s);register(new PhDStudent(“Joe”));

// 2. return valuepublic Student find(String name) { // I am lazy, so I am going to return Joe every time. return new PhDStudent(“Joe”);}

// 3. receiver of method call// toString in the class Object new PhDStudent(“Joe”).toString();

Page 20: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

20

Substitution Property (Cont.) Rules of (polymorphic) assignment

The type of expression at the right-hand side of an assignment must be a subtype of the type of the variable at the left-hand side of the assignment.

class Student { … }class Undergraduate extends Student { … }class Graduate extends Student { … }

Student s1, s2;s1 = new Undergradute(); // polymorphic assignments2 = new Graudate(); // polymorphic assignment

Graduate s3 = s2; // is this OK?

Graduate s3 = (Graduate) s2; // explicit casting

Page 21: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

21

Widening and Narrowing Def. widening and narrowing

The conversion of a subtype to one of its supertype is called widening, and the conversion of a supertype to one of its subtype is called narrowing (or downcasting).

// s is a stack of stringsStack s = new Stack();s.push(“Hello”); // widening: void push(Object)…// Stack defines a method top, i.e., “public Object top()”.s.top().size(); // okay?

((String) s.top()).size(); // downcasting

Page 22: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

22

Outline

Overloading Inheritance Subtyping Overriding Hiding

Page 23: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

23

Overriding Methods

Def. Overriding Refers to the introduction of an instance

method in a subclass that has the same name, signature, and return type of a method declared in the superclass.

Consequences Implementation of the method in the

subclass replaces the implementation of the method in the superclass

Page 24: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

24

Overriding Methods (Cont.)

public class T { public void m() { … }}

public class S extends T { public void m() { … }}

T t = new T();S s = new S();t.m(); // invoke m of class Ts.m(); // invoke m of class S

Page 25: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

25

Overriding Methods (Cont.)

Dynamic dispatch (binding): The method to be invoked is determined at runtime by the runtime type of the object, not by the declared type (static type).

class Student { public int minCredits() { return 12; } … }class GraduateStudent extends Student { public int minCredits() { return 9; } … }

Student s;// …s.minCredits(); // which minCredits method?

Page 26: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

26

Overriding Methods (Cont.)

Q. How overriding differ from overloading?

Page 27: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

27

Implementation of Dynamic Binding

Storage structure of instance variables Class instance records (CIRs) store the state of an

object The CIR for a subclass adds its new fields to the

parent CIR.

Dynamic bindings of messages to methods Virtual Method Tables (VMTs) are used for dynamic

binding.

Page 28: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

28

Dynamic Binding (Cont.)

class Point { private int x, y; public Point(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public int getY() { return y; }}

class ColoredPoint extends Point { private Color color; public ColoredPoint(int x, int y, Color c) { super(x, y); color = c; } public Color getColor() { return color; }}

xy…

xycolor…

CIR for ColoredPoint

CIR for Point

Page 29: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

29

super:vmt: …

Point.class

getX:getY: …

class:x: 10 y: 20color:

p:

Color.RED

super:vmt: …

ColoredPoint.class

Dynamic Binding (Cont.)

ColoredPoint p = new ColoredPoint(10,20,Color.RED);p.getColor();p.getX();

Object.class

super:vmt: …

getColor:…

Q: What if getX is overridden in ColoredPoint?

Page 30: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

30

Outline

Overloading Inheritance Subtyping Overriding Hiding

Page 31: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

31

Hiding Fields and Class Methods Def. Hiding

Refers to the introduction of a field (instance or class) or a class method in a subclass that has the same name as a field or class method declared in the superclass.

Hiding vs. overriding Statically resolved (bound) at compile-time

vs. dynamically dispatched at run-time

Page 32: 1 Inheritance in Java CS 3331 Fall 2009. 2 Outline  Overloading  Inheritance and object initialization  Subtyping  Overriding  Hiding

32

Exampleclass Student { protected String description = “Student”; public String getDescription() {

return description; } }class Undergraduate extends Student { protected String description = “Undergraduate”;}

new Student().getDecription(); // what value is returned?new Undergraduate().getDescription(); // what value?

Q. How to refer to hidden fields?

hiding offield