Java抽象类实现了一个接口,两者具有相同的方法

a.u*_*u.r 5 java oop abstract-class interface multiple-inheritance

在看一些OOP资料时,我想到了这个让我有点困惑的问题:

考虑具有以下接口、抽象类和具体类:

package one;

public interface A {

    void doStuff();
}

package one;


public abstract class B implements A {

    public abstract void doStuff();


}

class C extends B{


    public void doStuff() {

    }
 }
Run Code Online (Sandbox Code Playgroud)

类C除非提供 method 的实现,否则无法编译doStuff()。这里的问题是:

1- CdoStuff()类中的方法是接口A方法的实现,还是B类中的抽象方法?更具体地说:JVM 将如何将该函数视为接口或抽象类的调用函数?

doStuff()2-抽象类B中的抽象方法是否被认为是doStuff()接口A中方法的“实现” ?因此,类C必须实现抽象类的版本doStuff()而不是接口的版本?

Pow*_*ord 1

在接口中,所有方法都是public和abstract。

知道了这一点,接口A的doStuff其实就是 public abstract void doStuff()。这应该看起来很熟悉,因为抽象类 B 具有相同的方法签名。

要回答问题 1,B 类与A 接口doStuff()相同。由于 Java 中的所有方法都是virtual,因此无论您的 C 被声明为 A、B 还是 C,调用都是相同的。doStuff()doStuff()

至于问题2,没有。BdoStuff()是冗余代码,实际上不执行任何操作。doStuff()无论 B 是否声明,C 都会实现 A 的doStuff()。