ไม่ เราไม่สามารถสร้างวัตถุของคลาสนามธรรมได้ แต่เราสามารถสร้างตัวแปรอ้างอิงของคลาสนามธรรมได้ ตัวแปรอ้างอิงใช้เพื่ออ้างถึงวัตถุของคลาสที่ได้รับ (คลาสย่อยของคลาสนามธรรม)
คลาสนามธรรมหมายถึงการซ่อนการใช้งานและการแสดงนิยามฟังก์ชันให้กับผู้ใช้เรียกว่าคลาสนามธรรม คลาสนามธรรมของ Java สามารถมีเมธอดของอินสแตนซ์ที่ใช้พฤติกรรมเริ่มต้นได้ หากเราทราบข้อกำหนดและการใช้งานบางส่วน เราก็สามารถเลือกคลาสนามธรรมได้
ตัวอย่าง
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());
}
} ในตัวอย่างข้างต้น เราไม่สามารถสร้างวัตถุประเภทไดอะแกรม แต่เราสามารถสร้างตัวแปรอ้างอิงประเภทไดอะแกรมได้ ที่นี่เราสร้างตัวแปรอ้างอิงประเภท Diagram และตัวแปรอ้างอิงคลาส Diagram ใช้เพื่ออ้างถึงวัตถุของคลาส Rectangle และ Triangle
ผลลัพธ์
Inside Area for Rectangle. Area of Rectangle is: 45.0 Inside Area for Triangle. Area of Triangle is:40.0