当我声明“抽象的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?
}
答案 0 :(得分:0)
在类中明确放置抽象show
方法没有任何功能效果-扩展此抽象类的任何具体类都必须实现show()
,因为它是在该类实现的接口中定义的。
一些编码约定鼓励列出这样的方法以使它们的存在更加明显,但这主要是出于口味的考虑。
答案 1 :(得分:0)
您可能已经测试过,所以删除抽象类中的声明不会产生任何错误。可以安全地将其删除。
如果我要推测出这行冗余代码的原因,那么一个原因就是让Test
的子类更容易实现所需的方法。
想象一下,您正在尝试编写一个Test
子类,而有关的行不存在。您转到Test
的定义来查找要实现的方法,但是什么也没找到。您必须转到Inter
,才能查看需要实现的方法。现在想象一下继承链要深入得多。您是否看到必须遍历几层类才能看到要实现的方法?
但是,可以通过使用像IntelliJ这样的现代IDE来避免此类问题。它告诉您需要自动实现哪些方法。
当我声明“抽象的public void show();”时在抽象类Test中,它会创建一个全新的show()方法还是仅引用接口Inter中声明的show()方法?请说清楚。
这不会创建新方法(不会隐藏)。它会覆盖Inter
中声明的方法。这是IntelliJ的屏幕截图:
带有向上箭头的小“ O”表示覆盖。