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

Overload และ Override Static Methods ใน Java ได้หรือไม่?

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

ความแตกต่างสำคัญ

Best Practice

  • หลีกเลี่ยง static method hiding - สับสนง่าย
  • ใช้ instance methods สำหรับ polymorphic behavior
  • Static methods ใช้สำหรับ utility/factory ที่ไม่ต้องการ polymorphism
คุณสมบัติOverriding (Instance)Hiding (Static)
BindingDynamic (runtime)Static (compile time)
Polymorphismใช่ไม่ใช่
@Overrideได้ (ตรวจสอบ)ไม่ได้ (compile error)
เข้าถึง supersuper.method()BaseClass.method()