Download presentation
Presentation is loading. Please wait.
Published byDwayne Cox Modified over 9 years ago
1
1 / 71 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 4 Programming Fundamentals using Java 1
2
2 / 71 Inheritance Derive new classes (subclass) from existing ones (superclass). Only the Object class (java.lang) has no superclass Every class = subclass of Object.
3
3 / 71 Inheritance Code reuse – methods and properties. Use classes to model objects of the same type Define general class Then define specialized classes.
4
4 / 71 Inheritance Can only inherit from one class. Can inherit from multiple classes in other languages (C++)
5
5 / 71 Example Let’s say you create the following classes: Circle Rectangle Triangle etc. Share certain properties, but also specialized properties
6
6 / 71 Example public class GeometricObject { private String Color; private String name; private float area; // constructors... public GeometricObject(String color, String name) { … } // get/set methods, etc. }
7
7 / 71 Example public class Circle extends GeometricObject { private double radius;// specific property public Circle(double radius, String color, String name) { this.radius = radius; this.color = color; this.name = name; } // get/set methods, etc. public double getArea() { return radius * radius * Math.PI; }
8
8 / 71 Example An error in the constructor! public Circle(double radius, String color, String name) { this.radius = radius; this.color = color; this.name = name; } Why can’t we use “this.color” and “this.name”?
9
9 / 71 Example They are private properties. NOT accessible by subclasses. Should use setColor() instead. public methods/properties inherited.
10
10 / 71 Example public class Rectangle extends GeometricObject { private double width, height;// specific properties public Rectangle(double w, double h, String color, String name) { this.height = h; this.width = w; setColor(color); setName(name); } // get/set methods, etc. public double getArea() { return width * height; }
11
11 / 71 The super keyword Are constructors inherited? Yes. super used for: calling a super class constructor calling a super class method
12
12 / 71 The super keyword Constructors: super() calls the default constructor super(arguments) calls the constructors according to the arguments
13
13 / 71 The super keyword Constructors: public Circle(double radius, String color, String name) { super(color, name); this.radius = radius; }
14
14 / 71 The super keyword Constructors: public Circle(double radius, String color, String name) { super(color, name); this.radius = radius; } public GeometricObject(String color, String name) { this.color = color; this.name = name; }
15
15 / 71 The super keyword What if we don’t add the super(..) constructor call?
16
16 / 71 The super keyword public Circle(double radius, String color, String name) { this.radius = radius; }
17
17 / 71 The super keyword public Circle(double radius, String color, String name) { this.radius = radius; } Is the same as: public Circle(double radius, String color, String name) { super(); this.radius = radius; }
18
18 / 71 The super keyword Called Constructor Chaining
19
19 / 71 The super keyword Calling the super class methods super.method(parameters)... Optional
20
20 / 71 Using get/set methods to access properties of the superclass is cumbersome…
21
21 / 71 The protected keyword Often want subclasses to directly access properties/methods Use protected instead of private/public Subclasses can now directly access
22
22 / 71 Private public class GeometricObject { private String Color; private String name; private float area; // constructors... // get/set methods, etc. }
23
23 / 71 The protected keyword public class GeometricObject { protected String Color; protected String name; protected float area; // constructors... // get/set methods, etc. }
24
24 / 71 The protected keyword public class Circle extends GeometricObject { private double radius;// specific property public Circle(double radius, String color, String name) { this.radius = radius; this.color = color; this.name = name; } Now works!
25
25 / 71 Polymorphism Important aspect of OOP
26
26 / 71 Polymorphism Important aspect of OOP “capability of an action or method to do different things based on the object that it is acting upon. ”
27
27 / 71 Polymorphism Important aspect of OOP “capability of an action or method to do different things based on the object that it is acting upon. ” “characteristic of being able to assign a different meaning or usage to something in different contexts - specifically, to allow an entity such as a variable, a function, or an object to have more than one form.”
28
28 / 71 Polymorphism 1. Overriding Methods 2. Overloaded methods 3. Dynamic (late) method binding
29
29 / 71 Overriding Methods Sometimes need to overwrite methods written in the superclass Re-define the method in the subclass.
30
30 / 71 Overriding Methods The Object class and toString() toString() = String output when you print the object
31
31 / 71 Overriding Methods The Object class and toString() toString() = String output when you print the object Object class has default toString() method
32
32 / 71 The toString() method public String toString() { String str;... return str; }
33
33 / 71 The toString() method Circle circle1 = new Circle(“Circle1”, “Red”, 3.5); System.out.println(circle1); Output: ?
34
34 / 71 The toString() method Circle circle1 = new Circle(“Circle1”, “Red”, 3.5); System.out.println(circle1); Output: Circle@19821f
35
35 / 71 The toString() method So override the method public String toString() { String str = “”; str += “Circle: ” + getName() + “,”; str += “Color: ” + getColor() + “,”; str += “Radius: ” + getRadius(); return str; }
36
36 / 71 The toString() method Circle circle1 = new Circle(“Circle1”, “Red”, 3.5); System.out.println(circle1); Output: Circle: Circle1,Color: Red,Radius: 3.5
37
37 / 71 The equals() method The Object class and equals() equals (Object obj) = returns whether the object passed in and this one are the same
38
38 / 71 The equals() method Default implementation: public boolean equals(Object obj) { return (this == obj); } Compares references
39
39 / 71 The equals() method Circle circle1 = new Circle(3.5); Circle circle2 = new Circle(3.5);
40
40 / 71 The equals() method Circle circle1 = new Circle(3.5); Circle circle2 = new Circle(3.5); circle1.equals(circle2); // ?
41
41 / 71 The equals() method Circle circle1 = new Circle(3.5); Circle circle2 = new Circle(3.5); circle1.equals(circle2); // returns false!
42
42 / 71 The equals() method Circle circle1 = new Circle(3.5); Circle circle2 = new Circle(3.5); circle1.equals(circle2); // returns false! Circle circle3 = circle1; circle1.equals(circle3); // ?
43
43 / 71 The equals() method Circle circle1 = new Circle(3.5); Circle circle2 = new Circle(3.5); circle1.equals(circle2); // returns false! Circle circle3 = circle1; circle1.equals(circle3); // returns true!
44
44 / 71 The equals() method Override it public boolean equals(Object obj) { if (obj instanceof Circle) return this.radius == ((Circle)obj).getRadius(); else return false; }
45
45 / 71 The instanceof operator Test if object is of a specified type if (object instanceof Class)
46
46 / 71 The instanceof operator Test if object is of a specified type if (object instanceof Class) Example: Circle circle1 = new Circle(3.4); if (circle1 instanceof Circle) { … }
47
47 / 71 The instanceof operator Testing with the SuperClass: if (subclassObj instanceof SuperClass) { … } ?
48
48 / 71 The instanceof operator Testing with the SuperClass: if (Circle instanceof GeometricObject) { … } ?
49
49 / 71 The instanceof operator Testing with the SuperClass: if (subclassObj instanceof SuperClass) { … } returns true!
50
50 / 71 The instanceof operator Example: Circle circle1 = new Circle(3.4); if (circle1 instanceof GeometricObject) { … } returns true!
51
51 / 71 The instanceof operator What if we write: if (SuperClassObj instanceof subclass) { … }
52
52 / 71 The instanceof operator if (SuperClassObj instanceof subclass) { … } returns true as long as the object is an instance of the subclass
53
53 / 71 The instanceof operator Example: Object is a superclass of Circle public boolean equals(Object obj) { if (obj instanceof Circle) return this.radius == ((Circle)obj).getRadius(); else return false; }
54
54 / 71 The instanceof operator Be careful with null objects String s = null; s instanceof String = false
55
55 / 71 Object casting So we can determine if (SuperClassObj instanceof subclass) Convert it to subclass by casting
56
56 / 71 Object casting So we can determine if (SuperClassObj instanceof subclass) Convert it to subclass by casting Can now access members/properties
57
57 / 71 Object casting Once again... public boolean equals(Object obj) { if (obj instanceof Circle) { return this.radius == ((Circle)obj).getRadius(); } else return false; }
58
58 / 71 Object casting Once again... public boolean equals(Object obj) { if (obj instanceof Circle) { Circle circle = (Circle)obj; // casting return this.radius == circle.getRadius(); } else return false; }
59
59 / 71 Overloading Methods Looked at it before. Can have multiple methods with the same name. But different parameters, return type
60
60 / 71 Dynamic binding Object type is determined at run-time ability of a program to resolve references to subclass methods at runtime.
61
61 / 71 Dynamic binding public class GeometricObject { protected String Color; protected String name; protected float area; public float getArea() { return -1; }
62
62 / 71 Dynamic binding // Circle public class Circle { public float getArea() { return Math.PI * radius * radius; } // Rectangle public class Rectangle { public float getArea() { return width * height; }
63
63 / 71 Dynamic binding GeometricObject[] objs = new GeometricObject[2];
64
64 / 71 Dynamic binding GeometricObject[] objs = new GeometricObject[2]; objs[0] = new Circle(3); objs[1] = new Rectangle(1, 2);
65
65 / 71 Dynamic binding GeometricObject[] objs = new GeometricObject[2]; objs[0] = new Circle(3); objs[1] = new Rectangle(1, 2); for (GeometricObject i : objs) { System.out.println(i.getArea()); }
66
66 / 71 Dynamic binding GeometricObject[] objs = new GeometricObject[2]; objs[0] = new Circle(3); objs[1] = new Rectangle(1, 2); for (GeometricObject i : objs) { System.out.println(i.getArea()); } What’s the output?
67
67 / 71 Dynamic binding Output: 9.0 2.0 The subclass getArea() methods are called. At run-time, Java dynamically determines the class.
68
68 / 71 final Classes Sometimes classes shouldn’t be allowed to be extended. The String class for example. Use the keyword “final” final class String {... }
69
69 / 71 final Methods Methods which can’t be overridden in the subclasses.
70
70 / 71 Summary... Inheritance super protected Polymorphism Overloading Overwriting Dynamic binding instanceof Object casting final classes and methods
71
71 / 71 Next lecture... Abstract Classes Interfaces
Similar presentations
© 2025 SlidePlayer.com Inc.
All rights reserved.