ใน Java นามธรรมสามารถทำได้โดยใช้คลาสนามธรรมและอินเทอร์เฟซ ทั้งสองมีวิธีนามธรรมที่คลาสลูกหรือคลาสที่นำไปใช้งาน ต่อไปนี้เป็นข้อแตกต่างที่สำคัญระหว่างคลาสนามธรรมและอินเทอร์เฟซ
| ซีเนียร์ เลขที่ | Key | คลาสนามธรรม | อินเทอร์เฟซ |
|---|---|---|---|
| 1 | วิธีการที่รองรับ | คลาสนามธรรมสามารถมีได้ทั้งวิธีนามธรรมและรูปธรรม | อินเทอร์เฟซมีได้เฉพาะเมธอดนามธรรมเท่านั้น Java 8 เป็นต้นไป มันสามารถมีค่าเริ่มต้นเป็นวิธีการแบบคงที่ |
| 2 | การสืบทอดหลายรายการ | ไม่รองรับการสืบทอดหลายรายการ | อินเทอร์เฟซรองรับการสืบทอดหลายรายการ |
| 3 | ตัวแปรที่รองรับ | รองรับตัวแปรสุดท้าย ไม่สุดท้าย คงที่และไม่คงที่ | อนุญาตเฉพาะตัวแปรสแตติกและตัวแปรสุดท้ายเท่านั้น |
| 4 | การนำไปใช้ | คลาสนามธรรมสามารถใช้อินเทอร์เฟซได้ | อินเทอร์เฟซไม่สามารถใช้อินเทอร์เฟซ แต่สามารถขยายอินเทอร์เฟซได้ |
| 5 | คำหลัก | คลาสนามธรรมที่ประกาศโดยใช้คำสำคัญที่เป็นนามธรรม | อินเทอร์เฟซถูกประกาศโดยใช้คำสำคัญอินเทอร์เฟซ |
| 6 | การสืบทอด | คลาสนามธรรมสามารถสืบทอดคลาสอื่นโดยใช้คีย์เวิร์ดขยายและใช้งานอินเทอร์เฟซ | อินเทอร์เฟซสามารถสืบทอดได้เฉพาะอินเทอร์เฟซเท่านั้น |
| 7 | การสืบทอด | คลาสนามธรรมสามารถสืบทอดได้โดยใช้คีย์เวิร์ดขยาย | อินเทอร์เฟซสามารถใช้งานได้โดยใช้คีย์เวิร์ด Implement เท่านั้น |
| 8 | การเข้าถึง | คลาสนามธรรมสามารถมีสมาชิกประเภทใดก็ได้ เช่น ส่วนตัว สาธารณะ | อินเทอร์เฟซมีได้เฉพาะสมาชิกสาธารณะเท่านั้น |
ตัวอย่างคลาสนามธรรมเทียบกับอินเทอร์เฟซ
JavaTester.java
public class JavaTester {
public static void main(String args[]) {
Animal tiger = new Tiger();
tiger.eat();
Cat lion = new Lion();
lion.eat();
}
}
interface Animal {
public void eat();
}
class Tiger implements Animal {
public void eat(){
System.out.println("Tiger eats");
}
}
abstract class Cat {
abstract public void eat();
}
class Lion extends Cat{
public void eat(){
System.out.println("Lion eats");
}
} ผลลัพธ์
Tiger eats Lion eats