2010-06-07 33 views

回答

12

你不能用Java來做到這一點。

重載的方法基本上只是另一種方法。

的嘗試可以看看(東西)這樣

void yourMethod(String arg) { /* ... */ } 

void yourMethod(String arg, Object... prevent) { 
    throw new IllegalArgumentException(); 
} 

但自從Java做出決議通過看「最佳匹配」或「最具體的簽名」超載將無法正常工作。

的方法仍然可以用

void yourMethod(String arg, String arg2) { /* ... */ } 

這將做yourMethod("hello", "world")時被調用過載。

順便說一句,你爲什麼要防止重載?也許還有另一種做你想做的事情的方式?

3

標記類最終,它不能被擴展。這可能會挫敗其他一些目的。

+0

...例如重寫:-) – aioobe 2010-06-07 07:31:37

0

如果重載方法,則創建了一個名稱相同但參數類型不同的方法。在Java中,根據其參數定義(部分)方法,因此如果兩種方法具有相同的名稱但參數不同,則它們是蘋果和桔子,即不相同。總之,你不能阻止某人在課堂上創建新的方法,這實質上就是你所要求的。

-1

覆蓋和重載是不同的技術。重載是一種聲明多個具有相同名稱但參數類型不同或方法參數不同的方法。

+2

重載並不是OOP技術。這是一個方便的屬性,它使用靜態編譯時信息在源代碼中給出兩個可能完全不相關的函數。 – Zorf 2010-06-07 07:36:25

+0

謝謝Lajla。我不知道它不是OOP的一部分。 – Sujee 2010-06-07 07:47:36

+0

從我的回答中刪除了單詞「OOP」,因爲我誤解了過載是OOP技術之一。 – Sujee 2010-06-07 07:49:24

-2

您可以防止的方法被通過使其最終覆蓋,但你不能阻止一個方法被超載。從技術上講,你可以讓這個類本身是最終的,所以根本沒有任何方法可以通過創建一個子類來添加,但我認爲這不是一個好的設計。

+13

方法被覆蓋,不被覆蓋。 – 2010-06-07 07:39:04

+0

你有六年的時間來解決這個問題。投票刪除。 – EJP 2016-05-27 04:14:52

14

你不能。因爲它幾乎毫無意義。

如果您想超載方法handle(..)但您不允許,則您將創建doHandle(..)

在編譯時確定使用哪種重載方法(與在運行時確定的重寫方法相反)。所以重載的重點是共同的名稱共同操作。禁止這是代碼式的問題,而不是其他任何事情。

+2

+1無意義。編譯器永遠不會選擇重載方法中的一個,而不是重載方法。 – 2010-06-07 07:51:05

4

錯誤...不允許超載的方法是什麼?

防止覆蓋是允許的,因爲它可以由另一個程序員完成,他可能是另一部分代碼,他的類是從你的類繼承的。

重載是在同一個類中完成的,邏輯上應該由知道該代碼的程序員完成,並且正在處理代碼的相同部分。所以,如果他知道這個代碼(理論上)並且超載有一些固有的危險,那麼他應該知道這一點,因爲他知道代碼。

也就是說,超載不能像其他人已經描述的那樣停止。

0

簡單!不要調用那個重載的方法。

public class Test 
{ 

    public void m(int a) 
    { 
     *your definition* 
    } 
public void m(float a) 
    { 
     *your definition* 
    } 
} 
public static void main(Strings [] args) 
{ 
    Test t=new Test(); 
    t.m(5); 
}