rap*_*apt 23 java syntax specifications
可能以下内容无法完成(我收到编译错误:"继承的方法A.doSomthing(int)无法隐藏B"中的公共抽象方法):
public class A {
int doSomthing(int x) {
return x;
}
}
public interface B {
int doSomthing(int x);
}
public class C extends A implements B {
//trying to override doSomthing...
int doSomthing(int x) {
return doSomthingElse(x);
}
}
Run Code Online (Sandbox Code Playgroud)
假设我被允许改变A和B,我的问题是我可以以某种方式定义C,它将继承A和B(假设某些框架需要C,它们都是A的一个实例)和B).
或者如果没有,你会如何解决这个问题?
谢谢!
rat*_*eak 27
使方法公开
public class C extends A implements B {
//trying to override doSomthing...
public int myMethod(int x) {
return doSomthingElse(x);
}
}
Run Code Online (Sandbox Code Playgroud)
接口方法总是如此 public
或者只使用合成而不是继承
该方法在A类中doSomethis()是包私有的:
public class A {
int doSomthing(int x) { // this is package-private
return x;
}
}
Run Code Online (Sandbox Code Playgroud)
但它在界面B中是公开的:
public interface B {
int doSomthing(int x); // this here is public by default
}
Run Code Online (Sandbox Code Playgroud)
编译器正在doSomething()从A中继承C,这是一个包私有,作为B中公共的实现.这就是为什么它在抱怨 -
"继承的方法A.doSomthing(int)无法隐藏B中的公共抽象方法"
因为,在覆盖方法时,您无法缩小方法的访问级别.
解决方案很简单,在C级 -
@Override
public int doSomthing(int x) {
// ...
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
69962 次 |
| 最近记录: |