Không, chúng ta không thể tạo object của abstract class. Nhưng chúng ta có thể tạo biến tham chiếu của abstract class. Biến tham chiếu dùng để tham chiếu đến các đối tượng của derived classes (subclasses của abstract class).
Abstract class có nghĩa là ẩn implementation và chỉ show function definition cho người dùng gọi là Abstract class. Một Java abstract class có thể có instance methods implement default behavior nếu biết yêu cầu và partially implementation thì có thể dùng abstract class.
Ví dụ
abstract class Diagram {
double dim1;
double dim2;
Diagram(double a, double b) {
dim1 = a;
dim2 = b;
}
// area is now an abstract method
abstract double area();
}
class Rectangle extends Diagram {
Rectangle(double a, double b) {
super(a, b);
}
// override area for rectangle
double area() {
System.out.println("Inside Area for Rectangle.");
return dim1 * dim2;
}
}
class Triangle extends Diagram {
Triangle(double a, double b) {
super(a, b);
}
// override area for triangle
double area() {
System.out.println("Inside Area for Triangle.");
return dim1 * dim2 / 2;
}
}
public class Test {
public static void main(String args[]) {
// Diagram d = new Diagram(10, 10); // illegal now
Rectangle r = new Rectangle(9, 5);
Triangle t = new Triangle(10, 8);
Diagram diagRef; // This is OK, no object is created
diagRef = r;
System.out.println("Area of Rectangle is: " + diagRef.area());
diagRef = t;
System.out.println("Area of Triangle is:" + diagRef.area());
}
}Trong ví dụ trên, chúng ta không thể tạo object kiểu Diagram nhưng có thể tạo biến tham chiếu kiểu Diagram. Ở đây chúng ta tạo biến tham chiếu kiểu Diagram và biến tham chiếu Diagram class được dùng để tham chiếu đến object của class Rectangle và Triangle.
Kết quả
Inside Area for Rectangle. Area of Rectangle is: 45.0 Inside Area for Triangle. Area of Triangle is:40.0