使用关键字final
可以防止覆盖方法,同样如何防止重载?
答案 0 :(得分:14)
你做不到。因为它几乎没有意义。
如果您想重载方法handle(..)
但不允许使用,则需要创建doHandle(..)
。
在编译时确定使用哪种重载方法(与在运行时确定的重写方法相反)。因此,重载点是共享常用操作的通用名称。不允许这是代码风格的问题,而不是其他任何问题。
答案 1 :(得分:13)
你不能用Java做到这一点。
重载方法基本上只是另一种方法。
尝试可能看起来像这样的东西
void yourMethod(String arg) { /* ... */ }
void yourMethod(String arg, Object... prevent) {
throw new IllegalArgumentException();
}
但由于Java通过查看“最佳匹配”或“最具体的签名”来解决重载问题,因此无法正常工作。
该方法仍然可以用
重载void yourMethod(String arg, String arg2) { /* ... */ }
在执行yourMethod("hello", "world")
时会被调用。
答案 2 :(得分:4)
错误......不允许重载方法有什么意义?
允许覆盖保护,因为它可以由另一个程序员完成,该程序员应该处理代码的另一部分,并且他的类继承自您的类。
重载是在同一个类中完成的,并且逻辑上应该由知道此代码并且正在处理代码的相同部分的程序员完成。所以,如果他知道这个代码(理论上)并且在重载方面存在一些固有的危险,那么他应该知道这一点,因为他知道代码。
也就是说,重载不能像其他人已经描述的那样停止。
答案 3 :(得分:3)
将班级标记为最终,并且无法扩展。这可能会打败其他目的。
答案 4 :(得分:0)
如果重载方法,则创建了一个名称相同但参数类型不同的方法。在Java中,方法是根据其参数(部分地)定义的,因此如果两个方法具有相同的名称但不同的参数,则它们是苹果和橙子,即不相同。简而言之,您无法阻止某人在课堂上创建新方法,这实质上就是您所要求的。
答案 5 :(得分: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);
}
答案 6 :(得分:-1)
覆盖和重载是不同的技术。重载是一种声明具有相同名称但不同参数类型或不同参数的多个方法的方法。
答案 7 :(得分:-2)
您可以通过将方法设为最终来阻止覆盖,但无法阻止方法重载。从技术上讲,你可以让类本身最终,所以通过创建子类就不能添加任何方法,但我认为这不是一个好的设计。