2017-01-05 9 views
2

Я имею дело с некоторыми предыдущими экзаменационными работами, и здесь я не уверен в выходе. Я думаю, что я не понимаю, как продлить и супер.Замечание о выходе следующей программы Java

public class Superclass{ 
    public boolean aVariable; 

    public void aMethod(){ 
     aVariable = true; 
    } 
} 

class Subclass extends Superclass { 
    public boolean aVariable; 

    public void aMethod() { 
     aVariable = false; 
     super.aMethod(); 
     System.out.println(aVariable); 
     System.out.println(super.aVariable); 
    } 
} 

Я думаю, что второй выход будет истинным, поскольку он будет ссылаться на суперкласс, и это объект. Однако я не уверен в первом выпуске. Будет ли это просто значением и напечатать false или это тоже объект?

+1

Почему вы не компилируете и не запускаете его? Добавьте основной метод к подклассу, который вызывает aMethod(), и посмотрите, что такое вывод? – crowne

+0

err Мне также нужно объяснение .. –

ответ

1

Выход будет:

false 
true 

Потому что в вашем SubclassaVariable находится false по умолчанию (поэтому назначение aVariable = false; бесполезно). Узнайте больше о Primitive Data Types default values.
И в Superclass инициализации aVariable как true, вызывая суперкласс метод с использованием ключевого слова супер: super.aMethod();. Узнайте больше о Accessing Superclass Members.

Посмотрите на demo.

+0

Thx для вашей демонстрации, но когда я вставляю его в затмение, он просто не работает и предположил, что у меня нет основного метода и запускаю основной метод из других классов, как раньше –

+0

, поэтому, вызывая super.aMethod(); не изменяет значение aVariable на true на SubClass? – Ankit

+0

Нажмите правой кнопкой мыши на имя вашего класса в ** Project Explorer ** и выберите ** Run As ... → Java Application **. – DimaSan

1

Поскольку они оба охвачены собственным блоком классов, иметь их с тем же именем не имеет значения. Как теперь выглядит, вы устанавливаете aVariable в false, вызов супер не меняет этого, за исключением создания другой переменной (новой ссылки) с тем же именем и устанавливает ее в true. Таким образом, ожидаемый результат будет

false 
true 
1

выход будет:

false 
true 

super.aMethod() выполнит делая aVariable = true из SuperClass

aVariable из SubClass останется false.

+0

но почему супер.aMethod() до того, как println не повлияет на aVariable? –

+1

как объяснено выше, super.aMethod() изменяет значение aVariable для SuperClass, а значение aVariable для SubClass остается таким же – Ankit

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