Static Method Overloading: ได้
Static methods สามารถ overload ได้ (ชื่อเดียวกัน parameter ต่างกัน) เหมือน instance methods
ตัวอย่าง Overloading
public class Demo {
public static void test() {
System.out.println("test() no args");
}
public static void test(int val) {
System.out.println("test(int): " + val);
}
public static void main(String[] args) {
Demo.test();
Demo.test(57);
}
}
ผลลัพธ์
test() no args test(int): 57
ข้อจำกัด: ไม่สามารถ overload แค่ต่างที่ static modifier ได้
// ERROR: กำหนด static และ non-static ชื่อและ parameter เหมือนกันไม่ได้
static void foo() { }
void foo() { } // compile error
Static Method Overriding: ไม่ได้ (Method Hiding)
Static method ใน subclass ที่มี signature เดียวกัน parent เรียกว่า Method Hiding ไม่ใช่ Overriding
ตัวอย่าง Method Hiding
class Base {
static void show() { System.out.println("Base static"); }
void print() { System.out.println("Base instance"); }
}
class Derived extends Base {
static void show() { System.out.println("Derived static"); } // Hiding
@Override void print() { System.out.println("Derived instance"); } // Overriding
}
public class Demo {
public static void main(String[] args) {
Base obj = new Derived();
obj.show(); // Base static (static binding - compile time)
obj.print(); // Derived instance (dynamic binding - runtime)
}
}
ผลลัพธ์
Base static Derived instance
ความแตกต่างสำคัญ
| คุณสมบัติ | Overriding (Instance) | Hiding (Static) |
|---|---|---|
| Binding | Dynamic (runtime) | Static (compile time) |
| Polymorphism | ใช่ | ไม่ใช่ |
| @Override | ได้ (ตรวจสอบ) | ไม่ได้ (compile error) |
| เข้าถึง super | super.method() | BaseClass.method() |