Static Methods ใน Interface (Java 8+)
Interface สามารถมี static method ได้ เรียกผ่าน interface name โดยตรง ไม่ต้อง implement
ตัวอย่าง
interface MyInterface {
// Static method
static void staticMethod() {
System.out.println("Static method in interface");
}
// Abstract method (ต้อง implement)
void instanceMethod(String str);
// Default method (optional override)
default void defaultMethod() {
System.out.println("Default method");
}
}
public class DemoImpl implements MyInterface {
@Override
public void instanceMethod(String str) {
System.out.println("Implemented: " + str);
}
public static void main(String[] args) {
// เรียก static method ผ่าน interface
MyInterface.staticMethod();
// ใช้ instance method
DemoImpl obj = new DemoImpl();
obj.instanceMethod("Hello");
obj.defaultMethod();
}
}
ผลลัพธ์
Static method in interface Implemented: Hello Default method
คุณสมบัติสำคัญ
- Static method ใน interface ไม่ถูกสืบทอด (not inherited) โดย implementing classes
- ต้องเรียกผ่าน
InterfaceName.staticMethod()เสมอ - ไม่สามารถ override ได้ใน implementing class (แต่สามารถ declare method ชื่อเดียวกันได้ - เป็น method ใหม่)
- ช่วยจัดกลุ่ม utility methods ที่เกี่ยวข้องกับ interface ไว้ที่เดียว
Static vs Default Methods
| คุณสมบัติ | Static Method | Default Method |
|---|---|---|
| การเรียก | InterfaceName.method() | instance.method() |
| Override | ไม่ได้ (hide only) | ได้ (optional) |
| เข้าถึง this | ไม่ได้ | ได้ |
| สืบทอด | ไม่ | ใช่ |
กรณีใช้งาน
- Factory methods:
List.of(),Stream.of() - Utility methods:
Comparator.naturalOrder(),Predicate.isEqual() - Helper methods สำหรับ default methods