我理解“Hastail 接口(interface)中的 getTailLength() 方法被假定为公共(public)的,因为它是接口(interface)的一部分,因此,第 3 行该方法的实现 protected int getTailLength() {return 4;}
是无效覆盖”。
但我不知道为什么第5行不正确。解释说“类 Cougar 实现了 getTailLength() 的重载版本,但由于父类 Puma 中的声明无效,因此需要实现该方法的公共(public)版本”。
该行不包含getTailLength()
方法,为什么它需要实现该方法的公共(public)版本?
抱歉问了这个愚蠢的问题,我正在尽力理解它。
interface HasTail { int getTailLength(); }
abstract class Puma implements HasTail {
protected int getTailLength() {return 4;}
}
public class Cougar extends Puma {
public static void main (String[] args) {
Puma puma = new Puma();
System.out.println(puma.getTailLength());
}
public int getTailLength(int Length); {return 2;}
}
最佳答案
因为你无法更改 public
中的方法签名至protected
并且仍然实现public
接口(interface)来自HasTail
。在 Java 8+ 中,还可以提供 default
方法体到接口(interface)。
关于java - 为什么类 Cougar 需要在第 5 行实现方法的公共(public)版本,而该行没有方法(关于重载),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37358167/