Skip to main content
0
Basic ProgrammingjavaProgramming ConceptProgramming Language

เทียบให้ชัด Abstract Class vs Interface ต่างกันยังไงนะ ?

เคยสงสัยกันไหมว่า Abstract Class กับ Interface นั้นแตกต่างกันอย่างไร ซึ่งรูปแบบการใช้งานนั้น พอมองผ่าน ๆ แล้วดูเหมือนกับว่า แทบไม่ต่างกันเลย เผลอ ๆ นำมาใช้งานแทนกันเลยด้วยซ้ำ ซึ่งในวันนี้ทางผู้เขียนจะมาอธิบายให้กับทุกคนได้ฟังกัน

ก่อนอื่นเลย เรามาทำความรู้จักกันคร่าว ๆ เกี่ยวกับ Abstract Class กับ Interface กันก่อนเลย โดยที่บทความนี้จะขอใช้ Java ในการอธิบายเนื้อหาบทความนี้นะครับ

มาเริ่มกันด้วย Interface ก่อนแล้วกัน

Interface คือ Class ที่มีเฉพาะตัว Method Header เท่านั้น ไม่มีการ Implement การทำงานอะไรเลย ซึ่ง Method Header คือ Signature หรือการประกาศ Method ว่ามีชื่ออะไร รับอะไรมาบ้าง ส่วน Logic การทำงานของมันจะไปอยู่ใน Method Detail นั่นเอง

ซึ่ง Interface ในแง่ของ OOP นั้นเป็น Real Abstract หมายความว่า มันไม่มี Logic การทำงานอะไรเลย มาเป็นกรอบคร่าว ๆ เท่านั้นเอง

เวลาที่เราจะสร้าง Interface Class ต้องบอกด้วย Keyword Interface เสมอ และเวลาที่เราประกาศ Method ต่าง ๆ ที่อยู่ใน Class นี้ จะกลายเป็น Abstract ทั้งหมดโดยอัตโนมัติ

// Shape.java
public interface Shape {
   public abstract double area();
   public double volume(); // ต่อให้ไม่ใส่ abstract ก็จะถูกนับว่าเป็น abstract
}

เมื่อเราต้องการสร้าง Class ที่จะนำ Interface ไปใช้งานต่อนั้น ต้องใส่ keyword “implements” เสมอ และต้องคอยประกาศตัว Method ทุกตัวที่อยู่ใน Interface เสมอ ไม่งั้นโค้ดเราก็จะแดงอยู่อย่างนั้น

// Square.java
public class Square implements Shape {
 
   @Override
   public double area() {
      // TODO Auto-generated method stub
      return 0;
   }
 
   @Override
   public double volume() {
      // TODO Auto-generated method stub
      return 0;
   }
    
}

ต่อมาเราก็มาทำความรู้จักกับเจ้าตัว Abstract Class กันเถอะ

Abstract Class นั้นมีรูปแบบที่คล้ายเคียงกับ Interface เลย แต่จะมีข้อกำหนดที่ยืดหยุ่นกว่า เพราะเราสามารถใส่ Method ที่มี Logic เพิ่มลงไปได้ด้วย จากเดิมที่ Interface นั้นทำไม่ได้

เวลาที่เราจะสร้าง Class จะต้องประกาศด้วย Keyword “abstract” ซึ่ง Method ไหนที่เราต้องการให้ Subclass เอาไป Implement ต่อ ต้องมี Keyword “abstract” ระบุ เพื่อไว้ในส่วนของ Method Modifier เสมอ

Method ที่อยู่ใน Class นั้น จะเป็น Abstract หรือไม่เป็นก็ได้ แต่ถ้าไม่เป็นจะต้องเขียน Body ของ Method นั้น ๆ ด้วยเสมอ

// Option.java
public abstract class Option {
   public abstract String color(); // ตัวนี้เป็น Abstract
   public void sayHi() { // ตัวนี้ไม่ได้เป็น Abstract
      System.out.println("Hi");
   }
}

เวลาที่ Class จะนำ Abstract Class ไปใช้งานนั้น จะต้องใช้ Keyword “extends” ด้วยเสมอ

// Circle.java
public class Circle extends Option {
 
   @Override
   public String color() {
      // TODO Auto-generated method stub
      return null;
   }
 
}

จากโค้ดเราจะสังเกตเห็นว่าใน Option.java จะมี Method อยู่ 2 ตัว แต่พอเรา Extend มาใช้กับตัว Circle แล้วเรา Implement เพียงแค่ตัวเดียวเท่านั้น คือตัวที่เป็น Abstract ใน Option.java นั่นเอง

โดยรวมแล้วเจ้า Abstract Class กับ Interface นั้น มีสิ่งหนึ่งที่เหมือนกันนั่นก็คือ การที่เราจะเรียกใช้งานทั้งสองนั้น เราจะต้องสร้าง Class ที่ไว้เรียกใช้งานเจ้าสองตัวนี้ก่อน ถึงจะนำตัวที่เรียกใช้งาน Abstract Class กับ Interface ไปใช้งานต่อได้

หมายความว่า เราไม่สามารถสร้าง Class Object จาก Abstract Class กับ Interface โดยตรงได้ จะต้องใช้ Class ที่เรียกใช้ Abstract Class กับ Interface ในการสร้าง Class Object แทน

แล้วทีนี้เราน่าจะพอเข้าใจเกี่ยวกับ Abstract Class กับ Interface กันบ้างไม่น้อย งั้นเรามาสรุปถึงข้อแตกต่างกันระหว่าง ทั้ง 2 ตัวนี้กันเลย !

เป็นอย่างไรกันบ้างครับกับบทความนี้ หวังว่าเพื่อน ๆ ทุกคนจะไดเรียนรู้เกี่ยวกับ Abstract Class และ Interface กันและสามารถเข้าใจถึงความแตกต่างของทั้งสองได้นะครับ

Natakorn Hongharn

Author Natakorn Hongharn

More posts by Natakorn Hongharn

เราใช้คุกกี้เพื่อพัฒนาประสิทธิภาพ และประสบการณ์ที่ดีในการใช้เว็บไซต์ของคุณ คุณสามารถศึกษารายละเอียดได้ที่ นโยบายความเป็นส่วนตัว และสามารถจัดการความเป็นส่วนตัวเองได้ของคุณได้เองโดยคลิกที่ ตั้งค่า

ตั้งค่าความเป็นส่วนตัว

คุณสามารถเลือกการตั้งค่าคุกกี้โดยเปิด/ปิด คุกกี้ในแต่ละประเภทได้ตามความต้องการ ยกเว้น คุกกี้ที่จำเป็น

ยอมรับทั้งหมด
จัดการความเป็นส่วนตัว
  • คุกกี้ที่จำเป็น
    เปิดใช้งานตลอด

    ประเภทของคุกกี้มีความจำเป็นสำหรับการทำงานของเว็บไซต์ เพื่อให้คุณสามารถใช้ได้อย่างเป็นปกติ และเข้าชมเว็บไซต์ คุณไม่สามารถปิดการทำงานของคุกกี้นี้ในระบบเว็บไซต์ของเราได้
    รายละเอียดคุกกี้

  • คุกกี้สำหรับการติดตามทางการตลาด

    ประเภทของคุกกี้ที่มีความจำเป็นในการใช้งานเพื่อการวิเคราะห์ และ นำเสนอโปรโมชัน สินค้า รวมถึงหลักสูตรฟรี และ สิทธิพิเศษต่าง ๆ คุณสามารถเลือกปิดคุกกี้ประเภทนี้ได้โดยไม่ส่งผลต่อการทำงานหลัก เว้นแต่การนำเสนอโปรโมชันที่อาจไม่ตรงกับความต้องการ
    รายละเอียดคุกกี้

บันทึกการตั้งค่า