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

SuperClass object = new SubClass(); 

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

 SubClass object = new SubClass(); 

Я изучаю java.

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

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

 List someList = new ArrayList(); 

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

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

 Musician musician = new Pianist(); 

или

 Musician musician = new Drummer(); 

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

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

например, для classа Pianist : play() { playsBeethoven(); } play() { playsBeethoven(); }

Для получения подробной информации, пожалуйста, проверьте http://docs.oracle.com/javase/tutorial/java/IandI/polymorphism.html

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

Основная причина для первого заключается в вызове функций, которые ожидают суперclass. Если у вас есть class 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 } 

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

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

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

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

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

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

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

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

  • Как мне отображать закругленные углы в Android?
  • Импортирование двух classов с одинаковым именем. Как обращаться?
  • Неудачное обнаружение службы с использованием Bluetooth на Android
  • Android написать в папку sd card
  • Заполнение ListView с помощью ArrayList?
  • Какой метод в Java используется для уничтожения ваших объектов
  • Поиск количества ядер в Java
  • Свойство Java «user.dir» - что именно это означает?
  • Быстрое размытие растровых изображений для Android SDK
  • Android Studio: модуль не будет отображаться в «Редактирование конфигурации»
  • remove () в списке, созданном с помощью Arrays.asList () throws UnsupportedOperationException
  • Давайте будем гением компьютера.