【发布时间】:2013-05-31 05:58:46
【问题描述】:
假设我有一个抽象类:
abstract class DBTable {
abstract boolean append();
}
而且我还有一个继承自 DBTable 的子类:
// Client objects are rows of a database table
class Client extends DBTable {
@Override
boolean append() {
}
}
最后,假设我有一个 Client 的子类,我用它来表示 Client 对象的非规范化形式(我觉得这没关系。它都在同一个包中,并且 Client.Expand -is a-客户)。
我想做的是覆盖 Client.Expand 中的 append() 方法,并在返回执行仅适用于子类的工作之前将其链接到 Client 中的 append() 方法。像这样的...
// Expand is a member class of Client
static class Expand extends Client {
@Override
boolean append() {
super.append();
:
:
}
}
Java 允许这样做吗?当我尝试覆盖已在父类中覆盖的方法时,我从 IDE 收到错误。看起来我应该能够覆盖一个被覆盖的方法以提供子类所需的额外实现,但也许 Java 不是为这种继承而构建的?
【问题讨论】:
-
错误说明了什么?
-
Expand 是成员类,还是 Client 的子类?
-
是的,Expand 是 Client 的静态嵌套类。没关系,不过……静态嵌套类实际上与顶级类相同,只是捆绑为成员类。它应该能够毫无问题地将 Client 扩展为其成员类。
-
是的,尝试将 Expand 移动到它自己的对象(即不是成员类),并从其声明中删除 static 关键字。如果你这样做,它应该可以工作,许多 Java 框架使用你描述的方法链。
-
@Bhesh,我得到的错误是“这个方法已经在客户端被覆盖”。
标签: java oop inheritance overriding subclass