获取错误“Abs.show()中的继承方法无法隐藏iface中的公共抽象方法”对于下面编写的代码。
package com.xprodev;
abstract class Abs {
void show(){
System.out.println("in show");
}
abstract public void print();
}
interface iface {
void show();
void print();
}
public class BasicAbs extends Abs implements iface {
public static void main(String[] args){
BasicAbs a = new BasicAbs();
a.show();
a.print();
}
@Override
public void print() {
System.out.println("in print");
}
}
我可以通过将Abs中的节目视为公开来解决错误。但我几乎没有问题
答案 0 :(得分:2)
为什么语言支持这种用法?
不是 - 这就是你收到错误的原因
如果允许,可以实现什么目标?
回想一下,BasicAbs
是一个Abs
。
如果在接口发生冲突的情况下允许package protected
到public
的“自动转换”,则会损坏封装,基本上可以为每种方法创建一个接口从基类(可能是别人的类)中公开,这不是一个好主意。
在调用a.print()时,只会调用print的实现。是 调用此实现有意义的是Abs类中的方法 或iface接口。我们能知道吗?
Method m = BasicAbs.class.getMethod("print");
System.out.println(m.getDeclaringClass());
将屈服:
class BasicAbs