interface vs abstract class

ในการออกแบบคลาสในภาษา Java ถ้าให้เลือกว่าจะใช้อะไร ระหว่าง abstract class หรือ interface มีเกณฑ์ง่ายๆดังนี้

สอนคอมฟรี

  1. คลาสที่จะสืบทอด (ทั้ง extends และ implements) มีเมธอดชื่อเดียวกัน ที่มีพฤติกรรมเหมือนกัน?
    • ถ้าไม่เหมือนกัน ให้นำแค่ชื่อเมธอดไปใส่ใน interface
    • ถ้าพฤติกรรมเหมือนกัน ก็ต้องให้นำพฤติกรรมดังกล่าว (default implementation) ไปเขียนในเมธอดของ abstract class ที่เป็นคลาสแม่ (และเราอาจจะนำชื่อเมธอดนี้ไปใส่ไว้ใน interface และให้คลาสแม่ตัวนี้อิมพลีเมนท์ interface)
      abstract class มีข้อดีกว่า interface คือสามารถเขียน default implementation ได้ แต่ interface ไม่สามารถมีคำสั่งได้
  2. พฤติกรรมเป็นแกนหลักหรือไม่
    • ใช่ ให้ใช้ abstract class
    • ไม่ใช่ เป็นแค่พฤติกรรมเสริม ให้ใช้ interface
  3. คลาสลูกต้องการสืบทอดจากคลาสอื่นด้วยหรือไม่ ถ้าใช่ ก็ต้องใช้ interface
    interface มีข้อดีกว่า abstract class ตรงความยืดหยุ่นในการนำไปใช้ ผู้ใ้ช้สามารถสร้างคลาสที่อิมพลีเมนท์กี่เมธอดก็ได้

เขียนโปรแกรม Java เบื้องต้น

ขอบคุณความรู้จาก

หากจะนำเนื้อหาไปใช้ ต้องแสดงที่มา และห้ามใช้ในเชิงพาณิชย์

One thought on “interface vs abstract class

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s