获取错误“Abs.show()中的继承方法无法隐藏iface中的公共抽象方法”

时间:2015-07-07 08:47:17

标签: java inheritance

获取错误“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中的节目视为公开来解决错误。但我几乎没有问题

  1. 为什么语言支持这种用法?
  2. 如果允许,可以取得什么成果?
  3. 在调用a.print()时,只会调用print的实现。将此实现称为Abs类或iface接口中的方法是否有意义。我们能知道吗?

1 个答案:

答案 0 :(得分:2)

  

为什么语言支持这种用法?

不是 - 这就是你收到错误的原因

  

如果允许,可以实现什么目标?

回想一下,BasicAbs是一个Abs
如果在接口发生冲突的情况下允许package protectedpublic的“自动转换”,则会损坏封装,基本上可以为每种方法创建一个接口从基类(可能是别人的类)中公开,这不是一个好主意。

  

在调用a.print()时,只会调用print的实现。是   调用此实现有意义的是Abs类中的方法   或iface接口。我们能知道吗?

    Method m = BasicAbs.class.getMethod("print");
    System.out.println(m.getDeclaringClass());

将屈服:

class BasicAbs
相关问题