java - 为什么类 Cougar 需要在第 5 行实现方法的公共(public)版本,而该行没有方法(关于重载)

标签 java overloading

我理解“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/

相关文章:

oop - 多态性、重载和覆盖是相似的概念吗?

java - 使用多个构造函数创建不可变类

java - Spring Boot 删除 url 中发现的无效符号

java - 在 Tomcat 7 上通过 Internet 访问 Web 应用程序

java - 3D 相机类无法正常工作

java - Scala 重载不选择最具体的方法

c++ - 重载 + 运算符以组合两个使用 vector 的字典

c++ - 了解将调用哪个方法

java - 如何在Ubuntu 18.04上安装openjdk-9-jdk?

c++ - 为什么这个重载/命名空间/模板相关的 C++ 代码不能编译?