2015-09-22 2 views
-1

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

В этом выходном имени «Child» ожидает «o2.name»; но выход «Base» .Пожалуйста, объясните мне ...

+4

вы не можете переопределить vairables. Он просто использует первую переменную 'name', которую он может получить от класса' ovrriddingBase'. – SomeJavaGuy

+0

Я создаю объект для дочернего класса «ovrriddingBase o2 = new ovrriddingChild();» то я пытаюсь вызвать дочернюю переменную класса «имя». Я ожидаю ответ «Ребенок», но я получил «Базу» –

+1

Прошу прокомментировать фрагменты кода, а не скриншоты. – dimo414

ответ

3

В Java вы не переопределяете поля, вы просто скрываете их. Во время выполнения java проверяет ссылочный тип объекта, который вы используете, и вызывайте эту переменную.

Переменные не обязательно должны быть одного типа; это всего лишь две переменные, разделяющие имя.

Проверить это сообщения:
Overriding member variables in Java
Overriding a super class's instance variables
Is there a way to override class variables in Java?

4

переменные не являются полиморфными в Java; они не переопределяют друг друга. Когда вы делаете переменную с тем же именем в подклассе, это называется скрытием. В результате подкласс теперь будет иметь оба свойства. Вы можете получить доступ к одному из суперкласса с помощью super.var или ((SuperClass) this) .var

1

Java Не поддерживает переменную переопределения. Поэтому, когда вы пишете:

OverrridingBase o2= new Overridingchild(); 
System.out.println(o2.name); 

JVM будет принимать ссылочный тип o2 (т.е. OverrridingBase) и напечатает значение имени OverrridingBase

Смежные вопросы