1 / 71

COP 3503 FALL 2012 Shayan Javed Lecture 4

COP 3503 FALL 2012 Shayan Javed Lecture 4. Programming Fundamentals using Java. Inheritance. Derive new classes ( subclass ) from existing ones ( superclass ). Only the Object class ( java.lang ) has no superclass Every class = subclass of Object . Inheritance.

nanda
Download Presentation

COP 3503 FALL 2012 Shayan Javed Lecture 4

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. COP 3503 FALL 2012ShayanJavedLecture 4 Programming Fundamentals using Java

  2. Inheritance • Derive new classes (subclass) from existing ones (superclass). • Only the Object class (java.lang) has no superclass • Every class = subclass of Object.

  3. Inheritance • Code reuse – methods and properties. • Use classes to model objects of the same type • Define general class • Then define specialized classes.

  4. Inheritance • Can only inherit from one class. • Can inherit from multiple classes in other languages (C++)

  5. Example • Let’s say you create the following classes: • Circle • Rectangle • Triangle • etc. • Share certain properties, but also specialized properties

  6. Example public class GeometricObject { private String Color; private String name; private float area; // constructors... publicGeometricObject(String color, String name) { … } // get/set methods, etc. }

  7. Example public class Circle extendsGeometricObject { 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. publicdoublegetArea() { return radius * radius * Math.PI; } }

  8. 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. Example • They are private properties. • NOT accessible by subclasses. • Should use setColor() instead. • public methods/properties inherited.

  10. Example public class Rectangle extendsGeometricObject { 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. publicdoublegetArea() { return width * height; } }

  11. The super keyword • Are constructors inherited? • Yes. super used for: • calling a super class constructor • calling a super class method

  12. The super keyword • Constructors: • super() calls the default constructor • super(arguments) calls the constructors according to the arguments

  13. The super keyword • Constructors: public Circle(double radius, String color, String name) { super(color, name); this.radius = radius; }

  14. The super keyword • Constructors: public Circle(double radius, String color, String name) { super(color, name); this.radius = radius; } publicGeometricObject(String color, String name) { this.color = color; this.name = name; }

  15. The super keyword What if we don’t add the super(..) constructor call?

  16. The super keyword public Circle(double radius, String color, String name) { this.radius = radius; }

  17. 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. The super keyword Called Constructor Chaining

  19. The super keyword • Calling the super class methods • super.method(parameters)... • Optional

  20. Using get/set methods to access properties of the superclass is cumbersome…

  21. The protected keyword • Often want subclasses to directly access properties/methods • Use protected instead of private/public • Subclasses can now directly access

  22. Private public class GeometricObject { private String Color; private String name; private float area; // constructors... // get/set methods, etc. }

  23. The protected keyword public class GeometricObject { protected String Color; protected String name; protected float area; // constructors... // get/set methods, etc. }

  24. The protected keyword public class Circle extendsGeometricObject { 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. Polymorphism • Important aspect of OOP

  26. 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. 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. Polymorphism • Overriding Methods • Overloaded methods • Dynamic (late) method binding

  29. Overriding Methods • Sometimes need to overwrite methods written in the superclass • Re-define the method in the subclass.

  30. Overriding Methods • The Object class and toString() • toString() = String output when you print the object

  31. Overriding Methods • The Object class and toString() • toString() = String output when you print the object • Object class has default toString() method

  32. The toString() method publicStringtoString() { String str; ... return str; }

  33. The toString() method Circle circle1 = newCircle(“Circle1”, “Red”, 3.5); System.out.println(circle1); Output: ?

  34. The toString() method Circle circle1 = newCircle(“Circle1”, “Red”, 3.5); System.out.println(circle1); Output: Circle@19821f

  35. The toString() method • So override the method publicStringtoString() { String str = “”; str += “Circle: ” + getName() + “,”; str += “Color: ” + getColor() + “,”; str += “Radius: ” + getRadius(); return str; }

  36. The toString() method Circle circle1 = newCircle(“Circle1”, “Red”, 3.5); System.out.println(circle1); Output: Circle: Circle1,Color: Red,Radius: 3.5

  37. The equals() method • The Object class and equals() • equals (Object obj) = returns whether the object passed in and this one are the same

  38. The equals() method • Default implementation: publicbooleanequals(Object obj) { return (this == obj); } Compares references

  39. The equals() method Circle circle1 = newCircle(3.5); Circle circle2 = newCircle(3.5);

  40. The equals() method Circle circle1 = newCircle(3.5); Circle circle2 = newCircle(3.5); circle1.equals(circle2);// ?

  41. The equals() method Circle circle1 = newCircle(3.5); Circle circle2 = newCircle(3.5); circle1.equals(circle2);// returns false!

  42. The equals() method Circle circle1 = newCircle(3.5); Circle circle2 = newCircle(3.5); circle1.equals(circle2);// returns false! Circle circle3 = circle1; circle1.equals(circle3); // ?

  43. The equals() method Circle circle1 = newCircle(3.5); Circle circle2 = newCircle(3.5); circle1.equals(circle2);// returns false! Circle circle3 = circle1; circle1.equals(circle3); // returns true!

  44. The equals() method • Override it publicbooleanequals(Object obj) { if (objinstanceof Circle) return this.radius == ((Circle)obj).getRadius(); else return false; }

  45. The instanceofoperator • Test if object is of a specified type if (object instanceof Class)

  46. The instanceofoperator • Test if object is of a specified type if (object instanceof Class) • Example: Circle circle1 = new Circle(3.4); if (circle1 instanceofCircle) { … }

  47. The instanceofoperator • Testing with the SuperClass: if (subclassObjinstanceofSuperClass) { … } ?

  48. The instanceofoperator • Testing with the SuperClass: if (Circle instanceofGeometricObject) { … } ?

  49. The instanceofoperator • Testing with the SuperClass: if (subclassObjinstanceofSuperClass) { … } returns true!

  50. The instanceofoperator • Example: Circle circle1 = new Circle(3.4); if (circle1 instanceofGeometricObject) { … } returns true!

More Related