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

Getting error “The inherited method in Abs.show() cannot hide the public abstract method in iface”

获取以下所写代码的错误"abs.show()中的继承方法无法隐藏iface中的公共抽象方法"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
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中公开展示来解决这个错误。但我没什么问题

  • 为什么语言支持这种用法?
  • 如果允许,可以实现什么?
  • 在调用.print()时,只调用print的实现。调用这个实现在abs类或iface接口中是方法有意义吗?我们能知道吗?

  • Why the language support for this usage?

    不是的-这就是你出错的原因

    What can be achieved if this is allowed?

    回想一下,BasicAbs是一个Abs。如果允许在与接口发生冲突的情况下将package protected自动转换为public,则会破坏封装,基本上可以为要从基类(可能是其他类)公开的每个方法创建一个带有方法的接口,这不是一个好主意。

    on calling a.print() only implementation of print will be called . Is
    that make sense to call this implementation is of method in Abs class
    or iface interface. Can we know that?

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

    收益率:

    1
    class BasicAbs