![](/img/trans.png)
[英]How to override an interface method with no arguments in a class? (what's the bug)
[英]How to override a parent class's method but allow optional arguments?
我有:
class A{
public void foo(String str){
//do stuff
}
}
并且:
class B{
@Override
public void foo(String str, Integer... i){
//do different stuff
}
}
有没有办法做到这一点?
class B{
public void bar(String str, Integer... i){
//do different stuff
@Override
public void foo(String str){
if(something)
bar(str, 1);
else if(something else)
super.foo(str);
}
}
基本上:是否可以在允许可选参数的同时覆盖父方法,还是从根本上改变foo
的签名?
添加可选参数会更改方法的签名,从而防止覆盖。 您的代码示例中的@Override
属性无效。
您可以在JLS第8.4.2节中找到有关此内容的详细信息:
如果满足以下任一条件,则方法
m1
的签名是方法m2
的签名的子签名:
m2
与m1
具有相同的签名,或者m1
的签名与m2
的签名的擦除(第4.6节)相同。两个方法签名
m1
和m2
是倍率相当于当且仅当任一m1
是一个子签名m2
,或m2
是的子签名m1
。
您需要使用带有可选参数的签名定义其他方法,并通过对super
的引用来调用base方法。
如果签名不匹配,则不能覆盖该方法。
这就是我要做的:
class B
{
public void foo (String str, Integer... i)
{
// executed if i.length > 0
}
@Override
public void foo (String str)
{
// call super.foo(str) if you wish
// and/or do some other stuff
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.