2010-06-07 14 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); 
}