相关疑难解决方法(0)

可以使用默认方法实现在基类中实现抽象方法吗

如果我有一个带有抽象方法的类:

abstract class Base {
    abstract void foo();
}
Run Code Online (Sandbox Code Playgroud)

以及一个使用默认实现声明相同方法的接口:

interface Inter {
     default void foo() {
         System.out.println("foo!");
     }
}
Run Code Online (Sandbox Code Playgroud)

我是否需要在实现/扩展两者的类中提供实现?

class Derived extends Base implements Inter {

}
Run Code Online (Sandbox Code Playgroud)

看起来这应该可以工作,但是我收到一个编译错误,该错误Derived不是抽象的并且不会覆盖抽象方法foo

我猜测类的抽象方法比接口的默认方法“更重要”。

有什么好的方法可以使这项工作?

我的潜在的问题是,我有三级抽象类的层次结构(AB延伸CDE延伸FCF延伸G),其将具有叶类的多个实现。在每组实现中,都有一些在基类中定义的通用方法被实现,所以我希望写

abstract class C extends G {
     abstract void foo();
     abstract void bar();
     abstract void quz();
     void baz() {
         foo();
         bar();
     }
}

abstract class A …
Run Code Online (Sandbox Code Playgroud)

java inheritance default

5
推荐指数
1
解决办法
1416
查看次数

标签 统计

default ×1

inheritance ×1

java ×1