EDIT:
需要明确的是:设计相当丑陋并不是重点。关键是,设计已经存在,我面临的情况是必须添加另一个子类FlyingMotorizedVehicle
如果我忘记添加,这将无法按预期工作foo(...)
。所以我只是想知道是否可以将其重新定义为抽象。
我现在面临着一个非常奇怪的继承情况。
比方说,我有三节课,Vehicle
, MotorizedVehicle
and FlyingMotorizedVehicle
以及一堆课程Airplane
, Helicopter
, ...:
public abstract class Vehicle {
abstract Something doStuff(...);
abstract SomethingElse doOtherStuff(...);
abstract Foo bar(...);
}
public class MotorizedVehicle extends Vehicle {
@Override
Something doStuff(...) {
return new Something();
}
@Override
SomethingElse doOtherStuff(...) {
return new SomethingElse();
}
@Override
Foo bar(...) {
return new Foo();
}
}
public class FlyingMotorizedVehicle extends MotorizedVehicle {
@Override
SomethingElse doOtherStuff(...) {
return new SomethingElse();
}
}
public class Airplane extends FlyingMotorizedVehicle {
@Override
Foo bar(...) {
//do something different
return new Foo();
}
}
public class Helicopter extends FlyingMotorizedVehicle {
@Override
Foo bar(...) {
//do something totally different
return new Foo();
}
}
[...]
So Vehicle
是一个抽象类,提供一些抽象方法。MotorizedVehicle
是一个子类Vehicle
及其方法的具体实现。FlyingMotorizedVehicle
又是一个子类MotorizedVehicle
覆盖子集的实现MotorizedVehicle
方法。
现在有子类Helicopter
, Airplane
以及示例中可能覆盖的其他一些内容的具体实现MotorizedVehicle#bar(...)
。
我想要的是“强制”每个子类MotorizedVehicle
必须覆盖bar(...)
方法并提供自己的实现。
是否可以只改变FlyingMotorizedVehicle
通过以下方式:
public class FlyingMotorizedVehicle extends MotorizedVehicle {
@Override
SomethingElse doOtherStuff(...) {
return new SomethingElse();
}
abstract Foo bar(...);
}
所以我只是重新定义bar(...)
作为抽象方法?我的 IDE 并没有抱怨它,但这当然并不意味着它真的可以工作。
我希望你明白我在这里试图指出的内容。
提前致谢
Bluddy