1. CHAPTER 9
ABSTRACT CLASS & INTERFACE
Oum Saokosal, Chief of Computer Science
National Polytechnic Institute of Cambodia
Tel: (855)-12-252-752
E-mail: oum_saokosal@yahoo.com
1
3. Abstract Class
• Introduction
• What is abstract class?
• How to make a class to be abstract?
• How to use abstract class?
• Importance of abstract class
3
4. Introduction (1)
4
Today’s class is about abstract class.
It sounds to me it make no sense.
Do you know something about it?
Well. I know it, but you know..., I‘ve
never understood it until I met some
problem, then I realized I needed
abstract class and I knew it.
I will let you know the problem.
5. Introduction (2)
CB: So what is your problem?
SR: Ok! First I assume we have three 3 classes like this.
5
Shape
-color:String
+Shape()
+Shape(color)
+isFilled():boolean
+setFilled(filled):void
+getArea():double
+getParimeter():double
Circle
-radius:double
+Circle()
+Circle(radius:double)
+getRadius():double
+setRadius(radius):void
+getArea():double
+getPerimeter():double
Rectangle
-width,height:double
+Rectangle()
+Rectangle(width,height)
+getArea():double
+getPerimeter():double
6. Introduction (3)
CB: I’ve got it. These classes we have met so far.
SR: That’s right. Let’s see the code of Shape:
public class Shape {
public Shape(){}
public double getArea(){
return 0.0;
}
public double getPerimeter(){
return 0.0;
}
}
6
7. Introduction (4)
SR: We can see that in Shape class, the two methods
return zero. It’s not so useful here.
public double getArea(){
return 0.0;
}
public double getPerimeter(){
return 0.0;
}
CB: Why do you say that?
SR: You can see that we cannot do anything with zero.
CB: I guess not. I guess these two methods are not
important here but later these are for its subclasses.
7
8. Introduction (5)
SR: Yes you’re right. Actually, these methods was really designed not
for itself but for its children (subclasses).
SR: Here is some codes:
public class Circle extends Shape{
private double radius;
public Circle(double radius){
this.radius = radius;
}
@Override
public double getArea(){
return radius*radius*Math.PI;
}
@Override
public double getPerimeter(){
return 2*radius*Math.PI;
}
}
8
9. Introduction (6)
CB: I think we all know it. It should not be a problem like
you said.
SR: OK. Let’s me finish my story.
CB: OK. Go on...
SR: Can you imagine if you use polymorphism like this:
Shape shape = new Circle();
shape.getArea();
CB: Because in Circle we overrides the getArea()
method, then it calls getArea() in Circle.
9
10. Introduction (7)
SR: What about if we don’t override getArea() in
Circle?
public class Circle extends Shape{
private double radius;
public Circle(double radius){
this.radius = radius;
}
}
CB: So...
SR: And what will we get when using polymorphism:
Shape shape = new Circle();
shape.getArea();
10
11. Introduction (8)
CB: getArea() is from Shape because Circle has no
getArea(). It should not be a problem.
SR: Do you remember what the value that getArea()
return. Here is the code:
public double getArea(){
return 0.0;
}
CB: Yes. it returns 0.
SR: So can you see the problem.
CB: Yehh... A bit. Can you tell me more?
11
12. Introduction (9)
SR: You know, in my experience, sometimes we expected
to get a right calculation from subclass just like this:
public static void main(String[] args){
showArea(new Circle());
}
public static showArea(Shape s){
System.out.print(s.getArea());
}
SR: But I never get it right because I forgot to override in
my subclass, in this example, Circle class.
12
13. Introduction (9)
CB: Oh I see.
SR: You know what? To ensure that which methods I have
to override in subclass, I have to reopen the superclass
and find out the methods to be overridden.
CB: Oh really?
SR: Yes. Also sometimes I cannot find which methods in
superclass that I have to override.
CB: Hmmm...
SR: And even more seriously, usually we have to use
someone’s classes or use Java API library. So can you
imagine which method should be overridden?
CB: I can tell if I can see someone’s codes. I don’t know?
13
14. Introduction (10)
SR: You see? This is the point. If you want our subclass
have which methods to be overridden, we have to
make that methods and the superclass to be
abstract.
CB: What? Abstract?
SR: Yehh abstract.
CB: So what is abstract class?
SR: Let’s see it at the next slide.
14
15. What is abstract class?
• Abstract class is just like other class, but it marks
with abstract keyword.
• In abstract class, methods that we want to be
overridden in its subclass must mark with
abstract too. Moreover, those methods must
not contain any code.
• However, abstract class can have normal
properties, constructors, and other methods.
15
16. How to make a class to be abstract? (1)
Here is an example:
public abstract class Shape {
private String color;
public Shape(){}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
public abstract double getArea();
public abstract double getPerimeter();
}
16
17. How to make a class to be abstract? (2)
• And then in subclass, the method that mark with abstract
keyword, it will automatically request to be override without any
excuse.
public class Circle extends Shape{
private double radius
public Circle(){}
public Circle(double radius){
this.radius = radius;
}
@Override
public double getArea(){
return radius*radius*Math.PI;
}
@Override
public double getPerimeter(){
return 2*radius*Math.PI;
}
}
17
18. How to use abstract class? (1)
• You can use an abstract class by inheriting it using
extends keyword.
public class Circle extends Shape {
}
• Abstract class can also be a type.
Shape sh;//Shape is a type of sh variable
• Because abstract class can also be a type, we can use
polymorphism as well.
Shape sh = new Circle();
sh.getArea();
18
19. How to use abstract class? (2)
• You CANNOT create instances of abstract classes
using the new operator.
Shape shape = new Shape();// Compile Error
• We can make an abstract class by not making any
method abstract also. There is no any error.
public abstract class Shape {
public String getColor(){
return “”;
}
}
19
20. Importance of abstract class
• Abstract class is always a superclass. It means
when you make an abstract class, you have to
think that the class must be a superclass later.
• Abstract class is the way to guarantee that its
closed subclasses MUST override abstract
methods.
• The only reason that we have to make abstract
class is because of polymorphism.
• It makes no sense if we make abstract class, but
we don’t use any polymorphism.
20