gpt4 book ai didi

java - 抽象类是否隐藏或重写了接口(interface)的方法?

转载 作者:行者123 更新时间:2023-12-02 02:28:18 25 4
gpt4 key购买 nike

我正在为 OCA 学习,我尝试为我脑海中遇到的每个问题找到答案。

这是代码:

interface InterfaceA {
public default Number method(){
return 5;
}

}

abstract class AbstractB {
public Long method() {
return 3L;
}
}

public class Foo extends AbstractB implements InterfaceA {
public static void main(String[] args) {
System.out.println(new Foo().method());
}
}
}

在这种情况下,我不必在 Foo 类中进行重写。我知道如果我使用相同的方法实现 2 个接口(interface),我必须在类 Foo 中显式重写。在上面的示例中,我从 AbstractB (3) 获得结果。我的问题:抽象类是否隐式覆盖或隐藏接口(interface)中的方法?类 Foo 打印来自 AbstractB 而不是来自 InterfaceA 的结果的原因是什么?

最佳答案

抽象类实现接口(interface)中的方法。这不算是重写,因为没有可重写的基本方法。换句话说,如果您尝试这样做

abstract class AbstractB {
public Long method() {
return super.method(); // <<==== Does not compile!
}
}

对基类method()的调用将无法编译。

隐藏也不适用,因为只有 Java 中的静态方法可以隐藏。

why class Foo gets the result from his parent class and not from interface?

因为接口(interface)提供了默认实现,即继承行中没有提供其他任何内容时所得到的实现。在这种情况下,抽象基类提供了一个实现,因此它“战胜”了接口(interface)的默认实现。

关于java - 抽象类是否隐藏或重写了接口(interface)的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47501099/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com