You are on page 1of 14

Abstract Class

Lecture 22
Based on Slides of Dr. Norazah Yusof

1
Abstract Class
• Abstract class is a class with one or more abstract
methods.
• The abstract method

• Method signature without implementation


• An abstract class must have a modifier abstract
included in the class heading.
• The abstract class
• Cannot be instantiated
• Should be extended and implemented in subclasses

2
From Chapter 9
GeometricObject
-color: String The color of the object (default: white).
-filled: boolean Indicates whether the object is filled with a color (default: false).
-dateCreated: java.util.Date The date when the object was created.
+GeometricObject() Creates a GeometricObject.
+getColor(): String Returns the color.
+setColor(color: String): void Sets a new color.
+isFilled(): boolean Returns the filled property.
+setFilled(filled: boolean): void Sets a new filled property.
+getDateCreated(): java.util.Date Returns the dateCreated.
+toString(): String Returns a string representation of this object.

Circle Rectangle
-radius: double -width: double
+Circle() -height: double
+Circle(radius: double) +Rectangle()
+getRadius(): double +Rectangle(width: double, height: double)
+setRadius(radius: double): void +getWidth(): double
+getArea(): double +setWidth(width: double): void
+getPerimeter(): double +getHeight(): double
+getDiameter(): double +setHeight(height: double): void
+getArea(): double
+getPerimeter(): double 3
Abstract Classes
GeometricObject
-color: String
-filled: boolean
-dateCreated: java.util.Date
The # sign indicates
protected modifer #GeometricObject()
+getColor(): String
+setColor(color: String): void
+isFilled(): boolean
+setFilled(filled: boolean): void
+getDateCreated(): java.util.Date
+toString(): String
+getArea(): double
+getPerimeter(): double

Circle Rectangle
-radius: double -width: double

+Circle() -height: double

+Circle(radius: double) +Rectangle()


+getRadius(): double +Rectangle(width: double, height: double)
+setRadius(radius: double): void +getWidth(): double
+getDiameter(): double +setWidth(width: double): void
+getHeight(): double
+setHeight(height: double): void 4
Abstract Class

public abstract class GeometricObject{


private String color ="white";
private boolean filled;
private java.util.Date dateCreated;

protected GeometricObject(){
dateCreated = new java.util.Date();
}

:
public abstract double getArea();
public abstract double getPerimeter();
}

5
Abstract Class
public class Circle extends GeometricObject
{
private double radius;
:
:
public double getArea() {
return radius * radius * Math.PI;
}

public double getPerimeter() {


return 2 * radius * Math.PI;
}
}

6
Abstract Class
public class Rectangle extends GeometricObject
{
private double radius;
:
:
public double getArea() {
return width * height;
}

public double getPerimeter() {


return 2*(width + height);
}
}

7
NOTE
• An abstract method cannot be contained in
a non-abstract class.
• If a subclass of an abstract superclass
does not implement all the abstract
methods, the subclass must be declared
abstract.
• In other words, if a non-abstract subclass
extended from an abstract class, all the
abstract methods must be implemented,
even if they are not used in the subclass.

8
NOTE

• An abstract class cannot be instantiated


using the new operator, but you can still
define its constructors, which are invoked
in the constructors of its subclasses.
• For instance, the constructors of
GeometricObject are invoked in the Circle
class and the Rectangle class.

9
NOTE

• A class that contains abstract methods


must be abstract.
• However, it is possible to declare an
abstract class that contains no abstract
methods.
• In this case, you cannot create instances of
the class using the new operator. This class
is used as a base class for defining a new
subclass.

10
NOTE

• A subclass can be abstract even if its


superclass is concrete.
• For example, the Object class is concrete,
but its subclasses, such as
GeometricObject, may be abstract.

11
NOTE

• A subclass can override a method from its


superclass to declare it abstract.
• This is rare (unusual), but useful when the
implementation of the method in the
superclass becomes invalid in the
subclass.
• In this case, the subclass must be declared
abstract.

12
NOTE

• You cannot create an instance from an


abstract class using the new operator, but
an abstract class can be used as a data
type.
• Therefore, the following statement, which
creates an array whose elements are of
GeometricObject type, is correct.

GeometricObject[] geo = new GeometricObject[10];

13
Example: Using the GeometricObject
Class

• Objective: This example creates two geometric


objects: a circle, and a rectangle, invokes the
equalArea method to check if the two objects have
equal area, and invokes the
displayGeometricObject method to display the
objects.

14

You might also like