comp 401 inheritance: is-a - computer sciencedewan/comp401/current/lectures/is-a.pdf · 3 is-a is-a...
TRANSCRIPT
![Page 1: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/1.jpg)
COMP 401
INHERITANCE: IS-A
Instructor: Prasun Dewan
![Page 2: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/2.jpg)
2
PREREQUISITE
Interfaces
Inheritance and Arrays
![Page 3: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/3.jpg)
3
IS-A
IS-A Relationship
Human IS-A Mammal
Salmon IS-A Fish
ACartesianPoint IS-A Point
T1 IS-A T2 if T1 has all traits (
methods and variables in Java) of T2
![Page 4: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/4.jpg)
4
IS-A RELATIONSHIP
AString
Database
AString
History
Object
String
String
Database
String
History
implements extends
![Page 5: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/5.jpg)
5
IS-A DEFINITION
Implements: T1 implements T2 => T1 IS-A T2
AStringHistory IS-A StringHistory
AStringDatabase IS-A StringDatabase
Extends: T1 extends T2 => T1 IS-A T2
StringDatabse IS-A StringHistory
AStringDatabse IS-A AStringHistory
Transitive:
T1 IS-A T2
T2 IS-A T3
=> T1 IS-A T3 AStringDatabase IS-A StringHistory
Reflexive:
T1 == T2 => T1 IS-A T2StringHistory IS-A StringHistory
![Page 6: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/6.jpg)
6
WHY INTERESTING?
Human
Primate
Mammal
Animal
Physical
Object
Deluxe
Accord
Regular
Accord
Car
Vehicle
AString
Database
AString
History
Object
String
String
Database
String
History
Helps in understanding the designs/implementations
Helps users of the types
![Page 7: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/7.jpg)
7
EXACT TYPING AND OVERLOADED METHODS
public void print (ABMISpreadsheet aBMISpreadsheet) {System.out.println ("Height:" + aBMISpreadsheet.getHeight());System.out.println ("Weight:" + aBMISpreadsheet.getWeight());System.out.println("BMI:" + aBMISpreadsheet.getBMI());
}
print (new ABMISpreadsheet());
public void print (AnotherBMISpreadsheet aBMISpreadsheet) {System.out.println ("Height:" + aBMISpreadsheet.getHeight());System.out.println ("Weight:" + aBMISpreadsheet.getWeight());System.out.println("BMI:" + aBMISpreadsheet.getBMI());
}
print (new AnotherBMISpreadsheet());
![Page 8: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/8.jpg)
8
FLEXIBLE TYPING AND POLYMORPHISM
public void print (BMISpreadsheet aBMISpreadsheet) {System.out.println ("Height:" + aBMISpreadsheet.getHeight());System.out.println ("Weight:" + aBMISpreadsheet.getWeight());System.out.println("BMI:" + aBMISpreadsheet.getBMI());
}
print (new AnotherBMISpreadsheet());print (new ABMISpreadsheet());
ABMISpreadsheet implements
BMISpreadsheet
AnotherBMISpreadsheet
implements BMISpreadsheet
ABMISpreadsheet IS-A
BMISpreadsheet
AnotherBMISpreadsheet IS-A
BMISpreadsheet
T1 IS-A T2 if T1 has all traits (
methods and variables in Java) of T2
![Page 9: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/9.jpg)
9
IS-A (REVIEW)
IS-A Relationship
Human IS-A Mammal
Salmon IS-A Fish
ACartesianPoint IS-A Point
T1 IS-A T2 if T1 has all traits ( methods and
variables in Java) of T2
T1 IS-A T2 if the set of members of T1 is a
subset of the set of members of T2
T1 IS-A T2 if T2 can be substituted by T1 that is
whenever a member of T2 is expected a
member of T1 can be used
![Page 10: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/10.jpg)
10
IS-A RELATIONSHIP (REVIEW)
AString
Database
AString
History
Object
String
String
Database
String
History
implements extends
![Page 11: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/11.jpg)
11
WHY INTERESTING? (REVIEW)
Human
Primate
Mammal
Animal
Physical
Object
Deluxe
Accord
Regular
Accord
Car
Vehicle
AString
Database
AString
History
Object
String
String
Database
String
History
Helps in understanding the designs/implementations
Helps users of the types
T1 IS-A T2 if T1 has all traits ( methods and
variables in Java) of T2
T1 IS-A T2 if T2 can be substituted by T1 that is
whenever a member of T2 is expected a
member of T1 can be used
![Page 12: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/12.jpg)
12
FLEXIBLE TYPING AND POLYMORPHISM (REVIEW)
public void print (BMISpreadsheet aBMISpreadsheet) {System.out.println ("Height:" + aBMISpreadsheet.getHeight());System.out.println ("Weight:" + aBMISpreadsheet.getWeight());System.out.println("BMI:" + aBMISpreadsheet.getBMI());
}
print (new AnotherBMISpreadsheet());print (new ABMISpreadsheet());
ABMISpreadsheet implements
BMISpreadsheet
AnotherBMISpreadsheet
implements BMISpreadsheet
ABMISpreadsheet IS-A
BMISpreadsheet
AnotherBMISpreadsheet IS-A
BMISpreadsheetT1 IS-A T2 if T2 can be substituted by T1 that is
whenever a member of T2 is expected a
member of T1 can be used
![Page 13: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/13.jpg)
13
TYPE-CHECKING EXAMPLES
StringHistory stringHistory = new AStringDatabase();
StringDatabase stringDatabase = new AStringHistory();
AStringHistory stringHistory = new AStringHistory();
StringHistory stringHistory = new AStringHistory();
Value of type T1 can be assigned to variable of
type T2
If T1 IS-A T2
![Page 14: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/14.jpg)
14
RATIONALE AND CASTING
StringHistory stringHistory = new AStringDatabase();
stringHistory.size()
stringHistory .clear()
((StringDatabase) stringHistory) .clear()
StringDatabase stringDatabase = new AStringHistory();
stringDatabase.clear()
![Page 15: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/15.jpg)
15
ANALOGY FOR TYPE CHECKING RULES?
Human
Primate
Mammal
Animal
Physical
Object
Deluxe
Accord
Regular
Accord
Car
Vehicle
AString
Database
AString
History
Object
String
String
Database
String
History
If you need to be assigned a vehicle ( a pet)
A car or bicycle ( a cat or dog) will do
If you need to be assigned a car ( a dog )
A bicycle ( a cat) will not do
![Page 16: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/16.jpg)
16
GETTING AN UPGRADE
Regular Model Requested
RegularModel myCar = new ADeluxeModel ();
((DeluxeModel) myCar).
setCity(“Raleigh”);
Deluxe Model Assigned
myCar.steer();
Navigation
System
myCar.
setCity(“Raleigh”);
![Page 17: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/17.jpg)
17
GETTING A DOWNGRADE
Deluxe Model Requested
DeluxeModel myCar = new ARegularModel ();
Regular Model Assigned
myCar.steer();myCar.
setCity(“Raleigh”
);
![Page 18: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/18.jpg)
18
TYPING ARRAYS ELEMENTS
Object[] objects = { “Joe Doe”, new AStringDatabase(), new AStringHistory()};
String[] strings = {“Joe Doe”, new Object()};
Given an array of type T[], the type of each element of the array IS-A T.
The elements of an array can be of different types
![Page 19: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/19.jpg)
19
IS-A RULES REVISITED
Extends: T1 extends T2 => T1 IS-A T2
Implements: T1 implements T2 => T1 IS-A T2
Transitive:
T1 IS-A T2
T2 IS-A T3
=> T1 IS-A T3
Reflexive:
T1 == T2 => T1 IS-A T2
StringHistory stringHistory = new AStringDatabase();
Object o = stringHistory;
Value of type T1 can be assigned to variable of
type T2, if T1 is a T2
![Page 20: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/20.jpg)
20
CONCEPTUAL PROBLEMS IN JAVA
StringHistory stringHistory = new AStringHistory();
System.out.println(stringHistory);
Assigning an interface to an Object
Additional IS-A rule: T IS-A Object, for all T
println takes
argument of type
Object
! (Interface subtype of Class)
Interface subtype of Object
AString
Database
AString
History
Object
String
String
Database
String
History
![Page 21: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/21.jpg)
21
TYPE-CHECKING EXAMPLES FOR PRIMITIVE
TYPES
int i= 2.5;
double d = 2;
int i= (int) 2.5;
![Page 22: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/22.jpg)
22
ASSIGNMENT RULES FOR PRIMITIVE TYPES
If T1 narrower than T2 (Set of instances of T1 Set
of instances of T2)
Expression of type T1 can be assigned to variable of
type T2
Expression of type T2 can be assigned to variable of
type T1 with cast
Primitive casts can convert values
(int) double converts double to int value
Object casts never convert values!
![Page 23: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/23.jpg)
23
TREE
Human
Primate
Mammal
Animal
Physical
Object
Deluxe
Accord
Regular
Accord
Car
Vehicle
AString
Database
AString
History
Object
String
String
Database
String
History
DAG: Node with multiple parents?
![Page 24: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/24.jpg)
24
DAG? MULTIPLE INHERITANCE?
Human Vehicle ALocatableAString
History
ALocatableStringHistory
Parent
![Page 25: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/25.jpg)
25
PROBLEM WITH MULTIPLE CLASS INHERITANCE
ALocatableAStringHistory
ALocatableStringHistory
public String toString() {
String retVal = "";
for (int i = 0; i < size; i++) {
String separator =
(i == size- 1)?"":":";
retVal += separator + contents[i];
}
return retVal;
}
public String toString() {
return x + "," + y;
}
Which toString() should be called? They are different methods with the same header.
![Page 26: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/26.jpg)
26
PROBLEM WITH MULTIPLE INTERFACE
INHERITANCE?
LocatableStringHistory
LocatableStringHistory
public String toString(); public String toString();
Duplicates added to a set of methods
Inheriting the fact you have eyes vs. a particular kind of eyes
![Page 27: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/27.jpg)
27
CYCLES?
String
Database
String
History
Conceptually If a type is a special case of another type, it cannot be a general case of that type unless it is equal to the other type
![Page 28: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/28.jpg)
28
IMPLEMENTING MULTIPLE INTERFACES
public class ABMISpreadsheetAndCalculator implements BMISpreadsheet, BMICalculator{ double height, weight, bmi; public double getHeight() {
return height;}public void setHeight(double newHeight) {
height = newHeight;bmi = calculateBMI(height, weight);
} public double getWeight() {
return weight;}public void setWeight(double newWeight) {
weight = newWeight;bmi = calculateBMI(height, weight);
} public double getBMI() {
return bmi;}public double calculateBMI(double height, double weight) {
return weight/(height*height);}
![Page 29: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/29.jpg)
29
TYPING ISSUE
public static void main (String[] args) {BMISpreadsheet bmiSpreadsheet = new ABMISpreadsheetAndCalculator();bmi = bmiSpreadsheet.getBMI();
// bmi = bmiSpreadsheet.calculateBMI(1.77, 75);}
![Page 30: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/30.jpg)
30
MULTIPLE INTERFACE INHERITANCE
public interface BMISpreadsheetAndCalculator extends BMISpreadsheet, BMICalculator{
}
An interface can extend multiple interfaces
A class cannot extend multiple classes (in Java)
An extended interface or class may not have extra methods!
![Page 31: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/31.jpg)
31
IMPLEMENTING SINGLE INTERFACE
public class ABMISpreadsheetAndCalculator implements BMISpreadsheetAndCalculator{ double height, weight, bmi; public double getHeight() {
return height;}public void setHeight(double newHeight) {
height = newHeight;bmi = calculateBMI(height, weight);
} public double getWeight() {
return weight;}public void setWeight(double newWeight) {
weight = newWeight;bmi = calculateBMI(height, weight);
} public double getBMI() {
return bmi;}public double calculateBMI(double height, double weight) {
return weight/(height*height);}
![Page 32: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/32.jpg)
32
TYPING
public static void main (String[] args) {BMISpreadsheet bmiSpreadsheet = new ABMISpreadsheetAndCalculator();bmi = bmiSpreadsheet.getBMI();
// bmi = bmiSpreadsheet.calculateBMI(1.77, 75);}
public static void main (String[] args) {BMISpreadsheetAndCalculator bmiSpreadsheet =
new ABMISpreadsheetAndCalculator();double bmi = bmiSpreadsheet.calculateBMI(1.77, 75);bmi = bmiSpreadsheet.getBMI();
}
Every public method of a class must be in an interface
A class should implement a single (possibly multiply extended) interface
![Page 33: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/33.jpg)
33
INHERITING CONSTANTS
public class AStringDatabase
extends AStringHistory implements StringDatabase {
public AStringDatabase() {
System.out.println(MAX_SIZE);
}
….
}
public class AStringHistory implements StringHistory {
public final int MAX_SIZE = 50;
….
}
public interface StringDatabase extends StringHistory {
public final int MAX_SIZE = 20;
….
}
Ambiguous.
![Page 34: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/34.jpg)
34
INHERITING CONSTANTS
public class AStringDatabase
extends AStringHistory implements StringDatabase {
….
}
public class AStringHistory implements StringHistory {
public final int MAX_SIZE = 50;
….
}
public interface StringDatabase extends StringHistory {
public final int MAX_SIZE = 20;
….
}
StringDatabase stringDatabase = new AStringDatabase();
System.out.println(stringDatabase.MAX_SIZE); Interface constant used
![Page 35: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/35.jpg)
35
INHERITING CONSTANTS
public class AStringDatabase
extends AStringHistory implements StringDatabase {
….
}
public class AStringHistory implements StringHistory {
public final int MAX_SIZE = 50;
….
}
public interface StringDatabase extends StringHistory {
public final int MAX_SIZE = 20;
….
}
AStringDatabase stringDatabase = new AStringDatabase();
System.out.println(stringDatabase.MAX_SIZE); Ambiguous
![Page 36: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/36.jpg)
36
OBJECTEDITOR AND INHERITANCE
@StructurePattern(StructurePatternNames.POINT_PATTERN)
public interface MutablePoint {…}
@StructurePattern(StructurePatternNames.OVAL_PATTERN)
public class ACartesianPoint implements Point {…}
public class AMutablePoint extends ACartesianPoint
implements Point {…}
Class of the object gets precedence over its super types
@StructurePattern(StructurePatternNames.RECTANGLE_PATTERN)
public class AMutablePoint extends ACartesianPoint
implements MutablePoint {…}
Ambiguous
Java does not define inheritable annotations, this is ObjectEditor simulating inheritance using its own rules
![Page 37: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/37.jpg)
37
MULTIPLE INHERITANCE IN OBJECTEDITOR
@Explanation("Location in Java coordinate System.")
public interface Point {…}
@Explanation("Uses Cartesian representation.")
public class ACartesianPoint implements Point {…}
@Explanation("Has max and min values.")
public class ABoundedPoint extends AMuatablePoint
implements BoundedPoint {…}
Sometimes inherited attributes can be combined rather than overridden.
Calling super() essentially achieves that and some languages automatically called overridden methods in addition to constructors
![Page 38: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/38.jpg)
38
HOW TO GET INHERITANCE RIGHT?
If type T1 contains a super set of the method headers in another type T2, then T1 should extend T2?
![Page 39: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/39.jpg)
39
CORRECT USE OF INHERITANCE
String
History
size()
elementAt()
addElement()
String
Database
member()
removeElement()
clear()
AString
History
size()
elementAt()
addElement()
size
contents
MAX_SIZE
AString
Database
member()
removeElement
(String)
clear()
shiftUp()
indexOf()
implements
exte
nd
s
exte
nd
s
Supertype
Subtype
Superclass
Subclass
removeElement
(int)
isFull()
![Page 40: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/40.jpg)
40
NOT USING INHERITANCE WHEN YOU CAN
String
History
size()
elementAt()
addElement()
String
Database
size()
elementAt()
addElement()
member()
removeElement()
clear()
AString
History
size()
elementAt()
addElement()
size
contents
MAX_SIZE
AString
Database
size()
elementAt()
addElement()
member()
removeElement
clear()
size
contents
MAX_SIZE
shiftUp()
indexOf()
implements
removeElement
(int)
Method header
duplication
isFull()
Implementation
duplication
isFull()
![Page 41: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/41.jpg)
41
NOT USING INHERITANCE WHEN YOU CAN?
String
History
size()
elementAt()
addElement()
String
Database
sizeD()
elementAtD()
addElementD()
memberD()
removeElementD()
clearD()
AString
History
size()
elementAt()
addElement()
size
contents
MAX_SIZE
AString
Database
sizeD()
elementAtD()
addElementD()
memberD()
removeElementD
clearD()
size
contents
MAX_SIZE
shiftUp()
indexOf()
implements
removeElement
(int)
Same conceptual
operation associated
with different header
isFullD()
Same code
associated with
different header
isFull()
![Page 42: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/42.jpg)
42
POINT AND LINE
AMutable
Point
getX()
getY()
ALine
getX()
getY()
getWidth()
getHeight()
setX()
setY()
setWidth()
setHeight()
setX()
setY()
![Page 43: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/43.jpg)
43
INHERIT?
AMutable
Point
getX()
getY()
ALine
exte
nd
s
A Line is not a Point!
getWidth()
getHeight()
setX()
setY()
setWidth()
setHeight()
T1 IS-A T2 if T2 can be substituted by T1 that is
whenever a member of T2 is expected a
member of T1 can be used
![Page 44: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/44.jpg)
44
INHERIT? (REVIEW)
AMutable
Point
getX()
getY()
ALine
exte
nd
s
A Line is not a Point!
getWidth()
getHeight()
setX()
setY()
setWidth()
setHeight()
T1 IS-A T2 if T2 can be substituted by T1 that is
whenever a member of T2 is expected a
member of T1 can be used
![Page 45: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/45.jpg)
45
CORRECT USE
ALocatable
getX()
getY()
AMutable
Point
setX()
setY()
exte
nd
s
ALine
getWidth()
getHeight()
setWidth()
setHeight()
Often, to share code in two existing types, a common new super-
type is needed
An extending interface or
method may not add extra methods!
![Page 46: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/46.jpg)
46
AVERTICALLINE
Point
AVertical
Line
ALocatable
getX()
getY()
setX()
setY()
exte
nd
s
ALine
getWidth()
getHeight()
setWidth()
setHeight()
T1 IS-A T2 if the
set of members of
T1 is a subset of
the set of
members of T2
![Page 47: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/47.jpg)
47
OVERRIDING CODE AND LIMITATIONS
public class AVerticalLine extends ALine {
public AVerticalLine (int initX, int initY, int initHeight) {
super (initX, initY, 0, initHeight);
}
public void setWidth(int newVal) {
}
}
Subclass constructor can have fewer
parameters
Cannot disable inherited methods in
Java
Setter?
public static boolean checkLine(Line aLine, int aWidth) {aLine.setWidth(aWidth);return aLine.getWidth() == aWidth;
}
System.out.println(checkLine (new ALine(10, 10, 50, 50), 10));System.out.println(checkLine (new AVerticalLine(10, 10, 50), 10));
true
false
Some checks written for Aline do not work
for AVerticalLine
![Page 48: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/48.jpg)
48
TWO POTENTIAL PRINCIPLE VIOLATIONS
getP() == v if previous statement is setP(v)
A subtype passes all the checks passed by its supertype
Getter/Setter Rule
Liskov Substitution Principle
Very limited (efficiency based) overriding
By this definition a Set is not a Database
![Page 49: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/49.jpg)
49
PRINCIPLES FOLLOWED AND NOT FOLLOWED
T1 IS-A T2 if the set of members of T1 is a
subset of the set of members of T2
getP() == v if previous statement is setP(v)
A subtype passes all the checks passed by its supertype
Confusing and the solution depends on you!
![Page 50: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/50.jpg)
50
REFACTOR?
Point
ALocatable
getX()
getY()
setX()
setY()
exte
nd
s
AVertical
Line
getWidth()
getHeight()
setWidth()
setHeight()
ALine
exte
nd
s
A Line is not a vertical or horizontal
line!
From bad to worse
![Page 51: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/51.jpg)
51
REFACTOR?
Point
ALocatable
getX()
getY()
setX()
setY()
exte
nd
s
AShape
With
Height
getWidth()
getHeight()
setWidth()
setHeight()
ALine
exte
nd
s
AVertical
Line
No principle violations
Perhaps awkward and
too complicated
![Page 52: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/52.jpg)
52
GIVE AN ERROR?
public class AVerticalLine extends ALine {
public AVerticalLine (int initX, int initY, int initHeight) {
super (initX, initY, 0, initHeight);
}
public void setWidth(int newVal) {
System.out.println(“Cannot change width”);
}
}Several Java collection classes follow this philosophy
Immutable collection classes are subclasses of mutable collection classes, throwing exceptions on
read methods
Check will fail but checker knows the failure is deliberate
We have made a “bug” a “feature”
![Page 53: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/53.jpg)
53
PURE AND PRACTICAL ANSWER
Delegation, which we will study later!
![Page 54: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/54.jpg)
54
INHERITANCE RULES
Ensure that same conceptual operations are associated with same method headers in different types (interfaces/classes)
ObjectEditor patterns encourage reuse
Use inheritance to get rid of method header/body duplication in different types (interfaces/classes)
Inheritance should respect IS-A relationship
Often delegation (we will see later) is the answer
Getting inheritance right is tricky!
Throw away your first implementation
![Page 55: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/55.jpg)
55
PRIMITIVES AND OBJECTS
Object object = 5;
Primitive 5 converted into an instance of wrapper class Integer. Each primitive type is associated with a wrapper class that holds object versions
of values of the primitive type. Integer IS-A object, so this should work.
int i = (Integer) object
int i = object
Value of wrapper class converted into primitive value
int i = ((Integer) object).intValue;
![Page 56: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/56.jpg)
56
CASTING VS. INSTANCE OF
((StringDatabase) stringHistory) .clear()
if (stringHistory instanceof StringDatabase) {((StringDatabase) stringHistory) .clear();
} else {System.out.println("Got unlucky");System.exit(-1);
}
O instanceof T Return true if Class of O IS-A T
If program has an alternative plan then instanceof makes more sense
If it is going to give up and terminate, then instanceof check duplicates the
same check made by the cast to throw exception
![Page 57: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/57.jpg)
57
ALTERNATIVES
if (stringHistory instanceof StringDatabase) {display((StringDatabase) stringHistory);
} else if (stringHistory instanceof StringSet) {display((StringSet) stringHistory);
} else {display(stringHistory);
}
StringHistory stringHistory;
Usually considered bad programming to decide alternatives based on instanceof
If program has an alternative plan then instanceof makes more sense
![Page 58: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/58.jpg)
58
INSTANCE OF: THE CASE AGAINST
if (stringHistory instanceof StringSet) {display((StringDatabase) stringHistory);
} else if (stringHistory instanceof StringDatabase) {display((StringSet) stringHistory);
} else {display(stringHistory);
}
Make the alternative actions implementations of the same method in the type of the variable used in instanceof
Do not have to write the messy if and change it when additional subtypes of the variable type are added, Java does the dispatching
Declare display() in interface StringHistory and make different classes provide different implementations of it, which are chosen by Java (instead of user program) based on the
actual object assigned to stringHistory
stringHistory.display();
StringHistory stringHistory;
![Page 59: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/59.jpg)
59
WHY INSTANCE OF IS PROVIDED: THE CASE FOR
Display and data should be separate, here a separate class handles display of all kinds of string histories
Sometimes separation of concerns requires instanceof
Use instanceof for testing the class of tokens
Scanning and parsing are separate
StringHistory stringHistory;
stringHistory.display()
if (stringHistory instanceof StringDatabase) {display((StringDatabase) stringHistory);
} else if (stringHistory instanceof StringSet) {display((StringSet) stringHistory);
} else {display(stringHistory);
}
We have fattened the class with display - we want skinny classes in which
separable functions should be in separate classes
![Page 60: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/60.jpg)
60
SEPARATION OF CONCERNS
History Semantics
History Display 1
History Semantics
History Display 2
Can change display without changing other aspects of history
Display and semantics should go in different classes
if a part A of a class can be changed without changing some other part B of the class, then refactor and put A and B in different classes
![Page 61: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/61.jpg)
61
COMPILE TIME VS. RUNTIME CAST ERRORS:
CASTING CLASSES
Can cast an object /variable of class C1 to Class C2 only if C1 is the same or super or subtype of C2
ABMISpreadsheet bmiSpreadsheet = new ABMISpreadsheet();
ACartesianPoint cartesianPoint = (ACartesianPoint) bmiSpreadsheet;
bmiSpreadsheet can be assigned only an object of subtype of ABMISpreadsheet
No subtype of ABMISpreadsheet can be a subtype also of ACartesianPoint as Java has no multiple class inheritance
AStringHistory stringHistory = (AStringHistory) new AStringHistory();
AStringDatabase database = (AStringDatabase) stringHistory;
stringHistory = (AStringHistory) stringDatabase;
![Page 62: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/62.jpg)
62
COMPILE TIME VS. RUNTIME CAST ERRORS:
CASTING CLASSES
Can cast an object /variable of class C1 to Class C2 only if C1 is the same or super or subtype of C2
ABMISpreadsheet bmiSpreadsheet = …;
ACartesianPoint cartesianPoint = (ACartesianPoint) bmiSpreadsheet;
bmiSpreadsheet can be assigned only an object of subtype of ABMISpreadsheet
No subtype of ABMISpreadsheet can be a subtype also of ACartesianPoint as Java has no multiple class inheritance
AStringHistory stringHistory = …
AStringDatabase database = (AStringDatabase) stringHistory;
stringHistory = (AStringHistory) stringDatabase;
![Page 63: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/63.jpg)
63
COMPILE TIME VS. RUNTIME CAST ERRORS:
INTERFACES
ABMISpreadsheet bmiSpreadsheet = …
Point cartesianPoint = (Point) bmiSpreadsheet;
bmiSpreadsheet = (ABMISpreadsheet) cartesianPoint;
public class ABMISpreadsheetAndPoint
extends ABMISpreadsheet
implements Point {
…
}
ABMISpreadsheet bmiSpreadsheet = new ABMISpreadsheetAndPoint();
Point cartesianPoint = (Point) bmiSpreadsheet;
bmiSpreadsheet = (ABMISpreadsheet) cartesianPoint;
Some subtype of ABMISpreadsheet may implement Point
![Page 64: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/64.jpg)
64
FINAL CLASS
String string = “hello”;
Point cartesianPoint = (Point) string;
Some subtype of String may implement Point?
String is a final class and thus cannot be subtyped
public class AStringAndPoint
extends String
implements Point {
…
}
public final class String {
…
}
![Page 65: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/65.jpg)
65
INTERFACE CASTING RULES
Can cast an object /variable typed by a non final object type to any interface
Can cast an object /variable typed by an interface to any non final object type
![Page 66: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/66.jpg)
66
ASSIGNMENT RULES FOR OBJECT TYPES
If T1 IS-A T2, Expression of type T1 can be assigned
to Variable of type T2
Expression of type T1 can be assigned to Variable of
type T2 with (legal) cast of (T1)
![Page 67: COMP 401 INHERITANCE: IS-A - Computer Sciencedewan/comp401/current/Lectures/IS-A.pdf · 3 IS-A IS-A Relationship Human IS-A Mammal Salmon IS-A Fish ACartesianPoint IS-A Point T1 IS-A](https://reader033.vdocument.in/reader033/viewer/2022052810/607d70acb0940b3c6b6224f7/html5/thumbnails/67.jpg)
67
THE REST ARE EXTRA SLIDES