210 likes | 361 Views
Chapter 10 Abstract Class & Interface. Abstract Class. Abstract Class. Introduction What is abstract class? How to make a class to be abstract? How to use abstract class? Importance of abstract class. Introduction (1). Today’s class is about abstract class.
E N D
Abstract Class • Introduction • What is abstract class? • How to make a class to be abstract? • How to use abstract class? • Importance of abstract class
Introduction (1) 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.
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 Introduction (2) CB: So what is your problem? SR: Ok! First I assume we have three 3 classes like this.
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; } }
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.
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; } }
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.
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();
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?
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.
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?
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.
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.
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(); }
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; } }
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();
How to use abstract class? (2) • You CANNOT create instances of abstract classes using thenew 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 “”; } }
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 ofpolymorphism. • It makes no sense if we make abstract class, but we don’t use any polymorphism.