Interface รองรับ default methods ตั้งแต่ Java 8 บางครั้ง default methods นี้มีโค้ดที่ซ้ำกันในหลายเมธอด ในกรณีนี้ สามารถเขียน default method อีกตัวหนึ่งเพื่อ code reusability แต่หาก common code เป็น confidential ไม่ควรวางใน default methods เพราะทุกคลาสที่ implement interface นั้นเข้าถึง default methods ทั้งหมดได้
Interface สามารถมี private methods ตั้งแต่ Java 9 เมธอดเหล่านี้มองเห็นได้เฉพาะภายใน class/interface เดียวกัน จึงแนะนำให้ใช้ private methods สำหรับ confidential code นั่นคือเหตุผลที่เพิ่ม private methods ใน interfaces
ไวยากรณ์
private void methodName() {
// some statements/code
}
ตัวอย่างการใช้งาน
interface Operation {
default void addition() {
System.out.println("default method addition");
}
default void multiply() {
division(); // เรียก private method
System.out.println("default method multiply");
}
private void division() { // private method
System.out.println("private method division");
}
}
class PrivateMethodTest implements Operation {
public static void main(String args[]) {
PrivateMethodTest test = new PrivateMethodTest();
test.multiply();
}
}
ผลลัพธ์
private method division
default method multiply
Private Methods ใน Interface - สรุป
| ประเภท | เข้าถึงได้จาก | ใช้สำหรับ |
|---|---|---|
| default method | Implementing classes, sub-interfaces | Default implementation, API |
| static method | Interface name (Interface.staticMethod()) | Utility methods, factories |
| private method | ภายใน interface เดียวกันเท่านั้น | Helper code, shared logic, confidential |
| private static method | ภายใน interface เดียวกันเท่านั้น | Static helper, shared logic |
ข้อดี
- Encapsulation: ซ่อน implementation details
- Code reuse: แชร์โค้ดระหว่าง default/static methods
- Security: ไม่เปิดเผย logic ภายในให้ implementing classes
- Maintenance: แก้ไขที่เดียว ใช้ได้หลายที่
Private methods ใน interface ทำให้ default methods สะอาดขึ้น แยก interface contract ออกจาก implementation details