Как я могу изменить тип возвращаемого значения переопределенного метода? - PullRequest
0 голосов
/ 17 февраля 2012

Как я могу обеспечить, чтобы все 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 ]

2 голосов
/ 17 февраля 2012

К сожалению, ковариантный тип возврата был добавлен в java только из java5. Более старая версия [например, 1.3] не требует возврата типа дисперсии.

Подробнее об этом можно прочитать в этой статье

1 голос
/ 19 февраля 2012

Если у SlickTyre есть дополнительные свойства / функции, чем у других шин, возможно, вы нарушили принцип LSP .

Если вы работаете с J2ME (вы упомянули мобильный), общая практика - избегать абстракции, если в этом нет необходимости, эти дополнительные издержки могут повлиять на размер и производительность jarЧто ж, мы практикуем это 5 лет назад, когда телефоны требуют, чтобы файл jar был меньше 64 КБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...