Presentation is loading. Please wait.

Presentation is loading. Please wait.

1 / 41 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 5 Programming Fundamentals using Java 1.

Similar presentations


Presentation on theme: "1 / 41 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 5 Programming Fundamentals using Java 1."— Presentation transcript:

1 1 / 41 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 5 Programming Fundamentals using Java 1

2 2 / 41 Abstract Classes

3 3 / 41 Abstract classes  From the previous lecture: public class GeometricObject { protected String Color; protected String name; protected float area; // Constructors… // get/set methods… }

4 4 / 41 Abstract classes  So we can do: GeometricObject gObj = new GeometricObject(“AnObject, Red”);

5 5 / 41 Abstract classes  So we can do: GeometricObject gObj = new GeometricObject(“AnObject, Red”); But does it make sense to do this? What is a “GeometricObject” by itself?

6 6 / 41 Abstract classes  Solution:  Make it abstract!

7 7 / 41 Abstract classes  Solution:  Make it abstract! public abstract class GeometricObject {

8 8 / 41 Abstract classes  Used for defining classes for “abstract” concepts. (‘GeometricObject’, ‘Animal’, etc.)

9 9 / 41 Abstract classes  Used for defining classes for “abstract” concepts. (‘GeometricObject’, ‘Animal’, etc.)  Then define “concrete” concepts as subclasses. (Circle, Rectangle, etc.)

10 10 / 41 Abstract classes  Used for defining classes for “abstract” concepts. (‘GeometricObject’, ‘Animal’, etc.)  Then define “concrete” concepts as subclasses. (Circle, Rectangle, etc.)  More strictness = less room for ambiguity/error.

11 11 / 41 Abstract classes  Every GeometricObject has an area.

12 12 / 41 Abstract classes  Every GeometricObject has an area.  But getArea() defined differently for concrete objects.

13 13 / 41 Abstract classes  Every GeometricObject has an area.  But getArea() defined differently for concrete objects.  (Not defined for the GeometricObject class)

14 14 / 41 Abstract classes // Circle public class Circle extends GeometricObject { public float getArea() { return Math.PI * radius * radius; }

15 15 / 41 Abstract classes // Circle public class Circle extends GeometricObject { public float getArea() { return Math.PI * radius * radius; } // Rectangle public class Rectangle extends GeometricObject { public float getArea() { return width * height; }

16 16 / 41 Abstract classes 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()); }

17 17 / 41 Abstract classes 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()); } Will not Compile! Cannot find “getArea()” in the GeometricObject class.

18 18 / 41 Abstract classes  So make getArea() an abstract method in GeometricObject.

19 19 / 41 Abstract classes  So make getArea() an abstract method in GeometricObject.  Only a declaration in GeometricObject: public abstract class GeometricObject {... public abstract float getArea(); }

20 20 / 41 Abstract classes 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()); } Will now work! getArea() defined in GeometricObject

21 21 / 41 Abstract class characteristics  Class has abstract methods = has to be an abstract class

22 22 / 41 Abstract class characteristics  Class has abstract methods = has to be an abstract class  But: Abstract class can have no abstract methods.

23 23 / 41 Abstract class characteristics  Class has abstract methods = has to be an abstract class  But: Abstract class can have no abstract methods.  Subclass can be abstract, superclass can be concrete.

24 24 / 41 Abstract class characteristics  Concrete subclasses must define superclass abstract methods.  Circle, Rectangle have to define their own getArea();  Abstract methods can be defined, but usually aren’t.  Abstract classes cannot be instantiated.

25 25 / 41 Abstract class characteristics  Abstract class can be used as a data type though.  Example: GeometricObject gObj; GeometricObject[] objs = new GeometricObject[2];

26 26 / 41 Abstract class characteristics  Why is this allowed: GeometricObject[] objs = new GeometricObject[2];  They can’t be instantiated, so why allow as data types?

27 27 / 41 Abstract class characteristics 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()); } Can take advantage of polymorphism!

28 28 / 41 Abstract classes  Let’s say we need to check if areas of GeometricObjects are equal

29 29 / 41 Abstract classes  Let’s say we need to check if areas of GeometricObjects are equal  Define method called equalArea(...)

30 30 / 41 Abstract classes public static void main(String[] args) { Circle c1 = new Circle(3.0); Rectangle r1 = new Rectangle(2, 3); Rectangle r2 = new Rectangle(1, 6); SOP(“c1 and r1 have equal area: “ + equalArea(c, r1)); SOP(“r2 and r1 have equal area: “ + equalArea(r2, r1)); }

31 31 / 41 Abstract classes  How do you define equalArea(...)?

32 32 / 41 Abstract classes  How do you define equalArea(...)? public static boolean equalArea( ? obj1, ? obj2) { return obj1.getArea() == obj2.getArea(); }

33 33 / 41 Abstract classes  Could define it for all different comparisons: public static boolean equalArea( Circle c1, Rectangle r1) { return c1.getArea() == r2.getArea(); }

34 34 / 41 Abstract classes  Could define it for all different comparisons: public static boolean equalArea( Circle c1, Circle c2) { return c1.getArea() == c2.getArea(); }

35 35 / 41 Abstract classes  Could define it for all different comparisons: public static boolean equalArea( Rectangle r1, Rectangle r2) { return r1.getArea() == r2.getArea(); }

36 36 / 41 Abstract classes  Could define it for all different comparisons: public static boolean equalArea( Rectangle r1, Rectangle r2) { return r1.getArea() == r2.getArea(); } Tedious...

37 37 / 41 Abstract classes  Make it general thanks to abstract methods/classes: public static boolean equalArea( GeometricObject g1, GeometricObject g2) { return g1.getArea() == g2.getArea(); }

38 38 / 41 Abstract classes  Why not use the Object class? public static boolean equalArea( Object g1, Object g2) { return g1.getArea() == g2.getArea(); } What’s the problem?

39 39 / 41 Abstract classes  Why not use the Object class? public static boolean equalArea( Object g1, Object g2) { return g1.getArea() == g2.getArea(); } What’s the problem? Object class has no getArea() method!

40 40 / 41 Abstract classes  Why not use the Object class? public static boolean equalArea( Object g1, Object g2) { return g1.getArea() == g2.getArea(); } What’s the problem? Object class has no getArea() method! How would you fix it?

41 41 / 41 Abstract classes  Why not use the Object class? public static boolean equalArea( Object g1, Object g2) { GeometricObject go1 = (GeometricObject)g1; GeometricObject go2 = (GeometricObject)g2; return go1.getArea() == go2.getArea(); } Cast the objects

42 42 / 41 Next Lecture...  Interfaces.


Download ppt "1 / 41 COP 3503 FALL 2012 SHAYAN JAVED LECTURE 5 Programming Fundamentals using Java 1."

Similar presentations


Ads by Google