如何更改重写方法的返回类型?

时间:2012-02-16 23:12:44

标签: java oop design-patterns

如何强制所有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     
    }

2 个答案:

答案 0 :(得分:2)

不幸的是,covariant return type仅从java5添加到java。旧版本[例如1.3]不需要方差返回类型。

您可以在this article

中详细了解相关信息

答案 1 :(得分:1)

如果SlickTyre具有额外的属性/功能,那么其​​他Tire,你可能已经打破了LSP principle

如果您正在使用J2ME(您提到过移动设备),通常的做法是在不必要的情况下避免抽象,这些额外的开销可能会影响jar大小和性能。好吧,我们在5年前练习手机需要jar文件小于64kb。