Как объект одного типа ссылается на другой класс?
Предположим, у нас есть класс Dog и класс Animal.
Как понять работу этой строки?
Animal d = new Dog();
И в чем её различие с этой строкой?
Dog d = new Dog();
Ответы (3 шт):
"Animal d = new Dog()" - переменной типа Animal присваивается значение нового объекта класса Dog. Обычно в таких примерах Dog наследует Animal. Это значит, что у всякого Dog есть все свойства Animal, и никаких ошибок при использовании d возникать не должно. Да, и это фундаментальный признак объектно-ориентированного программирования - полиморфизм.
"Dog d = new Dog()" - переменной типа Dog присваивается значение нового объекта класса Dog.
Различие в типе переменной.
Читайте любой учебник или документацию.
Дополню:
Animal d = new Dog();
- Это называется Upcasting(от наследника к родителю) , мы приводим к классу родителя, поэтому нам будут доступны только ,то что есть в классе Animal(методы и свойства).
Dog dogo = (Dog) d;
- Это называется Downcasting(от родителя к наследникам), мы привели к исходному классу. Теперь нам доступно все . В переменную типа Dog можно поместить Animal только в том случае ,если в переменной типа Animal уже изначально находился экземпляр класса Dog как в примере выше.
читай - полиморфизм...
тут ещё можно приписать оператор Instanceof и тд и тп...
если ты уже изучал коллекции!??
не задавался вопросом почему в основном пишут
List<?> list = new ArrayList<>();
обращаясь к интерфейсу?
можно ещё вверх на ступеньку по иерархии наследования подняться
наследования по интерфейсу!
Iterable<?> iterable = new ArrayList<>();
ну и самый вверх)
Object someThing = new ArrayList<>();
почитай одну книжку
Мэтт Вайсфельд "Объектно-ориентированное мышление"
там про ооп страниц 150, но, если вникнуть, всё поймёшь...
