ใน 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