Ссылка на подкласс для объекта суперкласса - PullRequest
4 голосов
/ 11 августа 2011

Какая польза от создания ссылки на подкласс для объекта суперкласса

class A { /* ... */ }

class B extends A { /* ... */ }

public class Sample {
    public static void main(String a[]){
        A a = new B();
    }
}

Ответы [ 3 ]

3 голосов
/ 11 августа 2011

Одной из причин является то, что вы можете вызывать методы, которые появляются в подклассе, которые не появляются в / переопределяют методы суперкласса.

например,

Class A (Vehicle) ~ суперкласс

Class B (Car) ~ подкласс

В транспортном средстве есть метод с именем getTopSpeed(), который можно вызывать на любом транспортном средстве.У автомобиля есть метод под названием getTaxDiscExpiry(), который имеет смысл только для автомобилей, но не для других транспортных средств, таких как лодки.

2 голосов
/ 11 августа 2011

Вы имеете в виду создание "ссылки суперкласса на объект подкласса?"Этот вопрос, по-видимому, имеет больше смысла (и заключается в том, что делает код), поскольку вы действительно (или потенциально можете) потерять некоторую функциональность из-за методов, которые недоступны в суперклассе.

Если это так,это из-за абстракции - если у вас много машин, и вы хотите, чтобы они drive(), вам просто нужно относиться к ним как к автомобилям.Вам не нужно выяснять, какой тип машины они используют, и у вас есть дополнительные методы (например, massage() на некоторых автомобилях). Конечно, в этом случае снижение рейтинга даст вам больше методов для игры.но это просто ненужная сложность, которую вы не собираетесь использовать.

Это также общий супертип - если вы перебираете список saabs, vauxhalls и fords, вы можете поместить их все в List<Car> иитерируйте их как Cars.

На верхнем уровне вы можете просто иметь интерфейс Drivable и ссылаться на все автомобили с этим.Таким образом, в приведенном выше примере вы можете получить все, что водит, - автомобиль или нет - и вам никогда не понадобится знать больше деталей, чем нужно, а также расширить сферу охвата всего, что водит, а не только автомобилей.)

0 голосов
/ 11 августа 2011

Это бесполезно в вашем коде.но будут ситуации, когда в

многие классы расширяют один класс

, а метод, в котором в другом классе в то время вызывается оба этих класса

тип аргумента должен иметь свой тип суперкласса, чтобы объектно-ориентированное программирование стало удобным ...

одним словом все это для PolyMorphism .. примите условие, подобное приведенному ниже

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