【问题标题】:Is the abstract method in the interface Inter is same with the abstract method in the abstract class Test?接口Inter中的抽象方法是否与抽象类Test中的抽象方法相同?
【发布时间】:2018-12-15 20:45:52
【问题描述】:

当我声明'abstract 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?
}

【问题讨论】:

    标签: java interface abstract-class


    【解决方案1】:

    您可能已经测试过了,删除抽象类中的声明不会产生错误。可以安全移除。

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

    假设您正在尝试编写 Test 子类,但相关行不存在。你去Test的定义去寻找要实现的方法,却什么也没找到。你必须去Inter 看看你需要实现什么方法。现在想象一下继承链会更深。您是否看到需要查看多少层类才能看到要实现哪些方法?

    但是,使用 IntelliJ 等现代 IDE 可以避免此类问题。它告诉您需要自动实现哪些方法。

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

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

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

    【讨论】:

      【解决方案2】:

      在类中显式放置抽象 show 方法没有功能影响 - 任何扩展此抽象类的具体类无论如何都必须实现 show(),因为它是在类实现的接口中定义的。

      一些编码约定鼓励列出此类方法以使它们的存在更加明显,但这主要是个人喜好问题。

      【讨论】:

      • 当我声明'abstract public void show();'在抽象类 Test 中是创建一个全新的 show() 方法还是仅引用 Inter 接口中声明的 show() 方法?请澄清。
      • @PratipChakraborty 后者。您可以在类中为该方法添加@Override 注释以使其更明显。
      猜你喜欢
      • 1970-01-01
      • 2011-10-25
      • 1970-01-01
      • 2012-09-21
      • 2013-01-19
      • 1970-01-01
      • 2013-07-21
      • 2012-09-16
      • 1970-01-01
      相关资源
      最近更新 更多