接口Inter中的抽象方法是否与抽象类Test中的抽象方法相同?

时间:2018-07-07 14:09:50

标签: java interface abstract-class

当我声明“抽象的public void show();”时在抽象类Test中,它会创建一个全新的show()方法还是仅引用接口Inter中声明的show()方法?请澄清。

interface Inter
{
    void show();
}

abstract class Test implements Inter
{

     abstract public void show(); //What does this line signify?
}

2 个答案:

答案 0 :(得分:0)

在类中明确放置抽象show方法没有任何功能效果-扩展此抽象类的任何具体类都必须实现show(),因为它是在该类实现的接口中定义的。

一些编码约定鼓励列出这样的方法以使它们的存在更加明显,但这主要是出于口味的考虑。

答案 1 :(得分:0)

您可能已经测试过,所以删除抽象类中的声明不会产生任何错误。可以安全地将其删除。

如果我要推测出这行冗余代码的原因,那么一个原因就是让Test的子类更容易实现所需的方法。

想象一下,您正在尝试编写一个Test子类,而有关的行不存在。您转到Test的定义来查找要实现的方法,但是什么也没找到。您必须转到Inter,才能查看需要实现的方法。现在想象一下继承链要深入得多。您是否看到必须遍历几层类才能看到要实现的方法?

但是,可以通过使用像IntelliJ这样的现代IDE来避免此类问题。它告诉您需要自动实现哪些方法。

  

当我声明“抽象的public void show();”时在抽象类Test中,它会创建一个全新的show()方法还是仅引用接口Inter中声明的show()方法?请说清楚。

这不会创建新方法(不会隐藏)。它会覆盖Inter中声明的方法。这是IntelliJ的屏幕截图:

enter image description here

带有向上箭头的小“ O”表示覆盖。