2014-11-03 6 views
0

В определенной программе, где родительский класс является Super of the Child. В чем разница b/n.Наследование и объекты Java

Parent obj1=new Parent(); 
Parent obj2=new Child(); 
Child obj3=new Child(); 
+1

Разница в каком аспекте? –

+0

Методы будут вызываться на основе типа объекта, и поля будут выведены на основе ссылочного типа. Это различие. – TheLostMind

+0

obj2 - это тип parent и экземпляр child. Какие отличия от obj3. (любые аспекты) – user3922145

ответ

1
  1. parent obj1=new parent(); Здесь ссылочная переменная (obj1) является родительский тип и поэтому является объектом, созданным на куче

    • Вы можете позвонить все и только методы родительского класса
  2. parent obj2=new child(); Здесь ссылочная переменная (obj2) является родительский тип и объект (новый ребенок) создан на куче является Ребенок Тип

    • При вызове метода на obj2, это d вызывается из дочернего класса, Если он перегружен в нем иначе он будет вызван из родительского класса.
  3. child obj3=new child(); это то же, что и пункт один. Здесь ссылочная переменная и объект оба типа ребенка и не имеют ничего общего с родительским типом

далее на 8.4. Method Declarations -> Inheritance, Overriding, and Hiding и 9.4. Abstract Method Declarations -> Inheritance and Overriding

+0

Точный ответ, который я хотел. Большое спасибо! – user3922145

1

Хорошо, ключевая концепция отображается здесь называется Polymorphism. Теперь, придя к вашему вопросу, что это значит?

Родитель obj2 = new Child();

Это значит, что вы пытаетесь передать своего ребенка через своего родителя, помните, в этом случае, когда ваш ребенок уже наследует свойства родителя, логично, что вы можете получить доступ к тем свойствам, которые известны родителям, посредством ссылки (в основном, наследование и статический полиморфизм oops).

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

1

obj1 (линия 1) и obj3 (линия 3) действительно простой старый инициализации объектов, которые вы обычно используете. obj2 (строка 2) - это то, что интересно. Это позволяет вам сохранить код вызова по существу тем же самым, используя концепцию наследования, которая уже объяснялась выше, чтобы заменить разных детей и, таким образом, проявлять различное поведение во время выполнения.(Используя тот же родительский дескриптор и те же вызовы методов, используя этот дескриптор)

1

Первый из них почти очевиден: вы создаете экземпляр объекта того же класса. Что означает, объект obj1 is построен/создан так же, как и любой другой экземпляр его класса. Он имеет те же переменные-члены и те же методы .

Parent obj1 = new Parent(); 

Следующей является почти же, как и выше. Только так, как программисты, мы знаем, что Child является дочерним классом Parent и, таким образом, имеет схожие свойства с родительским. Однако дочерний класс может переписать некоторые из этих свойств и изменить его функциональные возможности.

Child obj3=new Child(); 

Так что, если вы звоните obj3.parentMethod(), результат может отличаться от obj1.parentMethod(). Но мы не можем точно знать.

Третья фактическая интересная часть:

Parent obj2=new Child(); 

Там у вас есть obj2, который является экземпляром класса Parent. Однако вы создаете экземпляр как экземпляр Child, поэтому он работает как пример Child (например, когда метод перезаписан), но он не имеет всех свойств ребенка .. ну он все еще имеет эти свойства, и он будет используйте их ... Но вы не сможете получить доступ к каким-либо дочерним методам. Так оно выглядит как Parent, но оно ведет себя как Child.

Для получения дополнительной (и более точной) информации вы должны прочитать this или ссылки, общие для других ответов.