-1

Предположим, у нас есть класс Dog и класс Animal.

Как понять работу этой строки?

Animal d = new Dog();

И в чем её различие с этой строкой?

Dog d = new Dog();

3 Answers3

1

Дополню:

Animal d = new Dog();

  • Это называется Upcasting(от наследника к родителю) , мы приводим к классу родителя, поэтому нам будут доступны только ,то что есть в классе Animal(методы и свойства).

Dog dogo = (Dog) d;

  • Это называется Downcasting(от родителя к наследникам), мы привели к исходному классу. Теперь нам доступно все . В переменную типа Dog можно поместить Animal только в том случае ,если в переменной типа Animal уже изначально находился экземпляр класса Dog как в примере выше.
0

"Animal d = new Dog()" - переменной типа Animal присваивается значение нового объекта класса Dog. Обычно в таких примерах Dog наследует Animal. Это значит, что у всякого Dog есть все свойства Animal, и никаких ошибок при использовании d возникать не должно. Да, и это фундаментальный признак объектно-ориентированного программирования - полиморфизм.

"Dog d = new Dog()" - переменной типа Dog присваивается значение нового объекта класса Dog.

Различие в типе переменной.

Читайте любой учебник или документацию.

rotabor
  • 4,251
-1

читай - полиморфизм...
тут ещё можно приписать оператор Instanceof и тд и тп...

если ты уже изучал коллекции!??
не задавался вопросом почему в основном пишут

List<?> list = new ArrayList<>();  

обращаясь к интерфейсу?
можно ещё вверх на ступеньку по иерархии наследования подняться
наследования по интерфейсу!

Iterable<?> iterable = new ArrayList<>();

ну и самый вверх)

Object someThing = new ArrayList<>();  

почитай одну книжку

Мэтт Вайсфельд "Объектно-ориентированное мышление"

введите сюда описание изображения

там про ооп страниц 150, но, если вникнуть, всё поймёшь...