Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

สามารถ Override แค่เมธอดเดียวขณะ Implement Interface ใน Java ได้ไหม?

คำตอบ: ไม่ได้ ต้อง Implement ทุก Abstract Method ของ Interface มิฉะนั้นจะ Compile Error ยกเว้นจะทำให้ Class เป็น abstract หรือใช้ default method

ตัวอย่าง Error: ไม่ Implement ครบ

interface Sample {
    void demoMethod1();
    void demoMethod2();
    void demoMethod3();
}

public class InterfaceExample implements Sample {
    public void demoMethod1() {
        System.out.println("Method 1");
    }
    public void demoMethod2() {
        System.out.println("Method 2");
    }
    // ไม่ implement demoMethod3() -> Error
}

Compile Error

InterfaceExample.java:6: error: InterfaceExample is not abstract and does not override abstract method demoMethod3() in Sample

วิธีแก้ 3 แบบ

1. Implement ทุกเมธอด (Standard)

public class InterfaceExample implements Sample {
    public void demoMethod1() { System.out.println("Method 1"); }
    public void demoMethod2() { System.out.println("Method 2"); }
    public void demoMethod3() { System.out.println("Method 3"); } // Implement ครบ
}

2. ทำให้ Class เป็น Abstract (ยังไม่สร้าง Object ได้)

public abstract class InterfaceExample implements Sample {
    public void demoMethod1() { System.out.println("Method 1"); }
    // demoMethod2, demoMethod3 ยังไม่ implement -> OK เพราะ Class เป็น Abstract
}

3. ใช้ Default Methods ใน Interface (Java 8+) - แนะนำ

interface Sample {
    void demoMethod1(); // Abstract - ต้อง Implement
    
    default void demoMethod2() { // Default - Optional
        System.out.println("Default Method 2");
    }
    
    default void demoMethod3() {
        System.out.println("Default Method 3");
    }
}

public class InterfaceExample implements Sample {
    public void demoMethod1() {
        System.out.println("Method 1");
    }
    // demoMethod2, demoMethod3 ใช้ Default ได้เลย
    
    public static void main(String[] args) {
        InterfaceExample obj = new InterfaceExample();
        obj.demoMethod1(); // Method 1
        obj.demoMethod2(); // Default Method 2
        obj.demoMethod3(); // Default Method 3
    }
}

ผลลัพธ์

Method 1
Default Method 2
Default Method 3

สรุป

  • Interface ธรรมดา (All Abstract) -> ต้อง Implement ทุกเมธอด
  • อยาก Override แค่บางเมธอด -> ใช้ Default Methods ใน Interface (Java 8+)
  • หรือทำ Class เป็น Abstract (แต่ไม่สามารถ new Object ได้)
  • Empty Body {} ยังนับว่า Implement แต่อาจไม่ใช่ Best Practice