如何强制所有Car
应具有特定类型的Tyre
?我正在使用Java 1.3(移动设备),因此无法使用泛型。
abstract class Car{
private Tyre[] tyres;
protected Car(){
tyres = createTyres();
}
protected abstract Tyre[] createTyres();
public Tyre[] getTyres(){
return tyres;
}
}
abstract class Tyre{}
//Concrete classes
class SlickTyre extends Tyre{}
class RacingCar extends Car {
public RacingCar(){
}
protected SlickTyre[] createTyres(){
return new SlickTyre[]{};
}
public SlickTyre[] getTyres(){
//this won't compile as it overrides the parent return type
}
答案 0 :(得分:2)
不幸的是,covariant return type仅从java5添加到java。旧版本[例如1.3]不需要方差返回类型。
您可以在this article
中详细了解相关信息答案 1 :(得分:1)
如果SlickTyre具有额外的属性/功能,那么其他Tire,你可能已经打破了LSP principle。
如果您正在使用J2ME(您提到过移动设备),通常的做法是在不必要的情况下避免抽象,这些额外的开销可能会影响jar大小和性能。好吧,我们在5年前练习手机需要jar文件小于64kb。