如果一个Alpha类的参数方法为public void foo(String... args)
&尝试通过说public void foo(String a)
在子类Beta中覆盖相同的方法。并创建一个参考对象&实例化为子类Beta&试图从Alpha访问foo方法。它从Alpha类返回值而不是Beta Sub-class的值。
不应该将BETA类的值作为其初始化&分配了Beta类对象?
有什么区别b / w Method(String ... args)
& Method(String a)
?
答案 0 :(得分:2)
这是因为Beta
中的方法不覆盖Alpha中的方法,因为它没有相同的形式参数。 String...
与String
不同,与String[]
与String
不同的方式非常相似。
答案 1 :(得分:1)
一个参数为String
的方法不会覆盖一个参数为String...
的方法。参数类型String...
是一个变量arity方法,意味着可以传递0个或多个参数,例如foo("one", "two", "three")
。在方法的主体中,它被视为一个数组,而不是单个String
。如果您在@Override
的{{1}}声明中使用了Beta
,则编译器会发现您没有覆盖foo
。您已经重载了foo
。
要覆盖方法,必须使参数和方法名称完全匹配。实际上,由于调用方法的方式,即使参数都被视为数组,你甚至不能将类型设为foo
。
答案 2 :(得分:1)
方法重写:
方法重载。 (方法重载可以在同一个类中进行,即不需要子类化)
方法签名包括:
<强>不包括强>
<强> PROOF 强>
您实际上可以轻松测试自己的问题:
class Parent{
public void doWork(String s1, String s2){
System.out.println("From Parent");
}
}
class Child extends Parent{
@Override //<-This will tell you whether it successfully overridden or not
public void doWork(String s1){
System.out.println("From Child");
}
}
输出?
这将是一个错误。因为您告诉 Child 类从Parent重写方法doWork(String)
。但是在Parent类中找不到这样的方法。 父 类只有一种称为doWork(String, String)
的方法。
<强>结论:强> 回答你的问题是否定的, 不会被覆盖 ,因为来自子类的方法与父类具有不同的方法签名&#39;方法