Использование суперкласса для инициализации объекта подкласса java - программирование
Подтвердить что ты не робот

Использование суперкласса для инициализации объекта подкласса java

SuperClass object = new SubClass();

Зачем использовать суперкласс для создания объекта подкласса, как указано выше? Поскольку единственный способ, которым я научился создавать объект, - это:

SubClass object = new SubClass();

Я изучаю java.

4b9b3361

Ответ 1

У вас может быть метод, который принимает только экземпляр SuperClass. Поскольку SubClass является SuperClass, вы можете использовать экземпляр SubClass и рассматривать его как SuperClass.

Такое же поведение используется при работе с интерфейсами:

List someList = new ArrayList();

Это красота полиморфизма. Это позволяет вам изменить реализацию внутренних компонентов класса, не нарушая остальную часть вашего кода.

Ответ 2

Это известно как полиморфизм. Представьте следующий пример:

Musician musician = new Pianist(); 

или

Musician musician = new Drummer(); 

Предположим, что класс Musician имеет метод: play(). Не имеет значения, кто такой музыкант, если вы называете метод игры, вы будете знать, как играть на определенном инструменте, основываясь на конкретном классе, на этом случае, независимо от того, пианист или барабанщик.

Каждый конкретный класс, перезаписывая свой метод play(), может играть самостоятельно:

например. для класса Pianist: play() { playsBeethoven(); }

Подробную информацию см. http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

Всегда полезно запомнить его с наследованием http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html

Ответ 3

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

public static void insert(SuperClass b) {
    //do something
}

и у вас есть

SuperClass object = new SubClass();

вы можете сделать

A.insert(object);

Но если вы делаете

SubClass object new SubClass();

вы не можете сделать

A.insert(object);

если вы не добавите такой метод в A

public static void insert(SubClass b) {
     //do something
}

Это поможет вам сократить избыточный или скопированный код и сохранить чистоту.

Ответ 4

Все, что вы делаете, сообщает JVM, что тип ссылки находится во время компиляции.

В первом случае вы говорите, что ссылка на объект имеет статический тип суперкласса. Когда вы создаете новый объект подкласса, вы можете иметь для него эту опорную точку, потому что экземпляр суперкласса класса SU-класс.

Ответ 5

Это одна из основных причин, по которой вы используете наследование. Вы рассматриваете SuperClass как абстракцию, и во время компиляции вам не нужно знать производный тип, или другой класс не должен знать производный тип. Это позволяет использовать ссылки на SuperClass при использовании полиморфизма для вызова методов производного класса.

Это позволяет вам

a.) Создайте фабрики, чтобы вам не нужно было знать тип во время компиляции, и у вас есть некоторый метод выполнения, который создает производные типы. Подумайте о COM, GStreamer, DirectShow, Glib и т.д.

b.) Скрыть сложность для других объектов, только разоблачая ссылки базового типа, даже если они являются экземплярами производного типа. Подумайте о методах, которые возвращают объект или берут ссылку на объект в качестве аргумента.

c.) гораздо больше возможностей, но это, вероятно, наиболее важные для вас два использования.