2017-02-15 10 views
2

Так почему же я могу отличить родительский класс как ребенок, но не наоборот?Проблемы наследования JAVA - это отношение между родительским и дочерним классами

Когда я устанавливаю объект родительского класса в child и наоборот, свойства не копируются почему?

public class senior { 
    private int a = 6; 

    public int getA() { 
     return a; 
    } 

    public int x = 1; 
} 

class junior extends senior { 
    public junior() { 
     super(); 
    } 

    public int x = 0; 
} 

public class runner { 
    public static void main(String[] args) { 
     senior S = new senior(); 
     junior J = new junior(); 
     senior S1 = new senior(); 
     junior J1 = new junior(); 
     int b = J.getA(); 
     System.out.println(b); 
     S = J; // aliasing ? 
     // J 0 S 1 
     System.out.println(S.x); // should print 0 but prints 1 
     System.out.println(J.x); 

     J1 = (junior) S1; // Senior cannot be cast to junior, why? 
     System.out.println(S1.x); 
     System.out.println(J1.x);// should print 1 but prints 0 
    } 
} 
+0

Возможный дубликат [Что такое переменная тень, используемая в классе Java?] (Http://stackoverflow.com/questions/1092099/what-is-variable-shadowing-used-for-in-a-java- класс) – Axel

+0

Это легко - потому что Junior IS-A Senior, но это не так, наоборот. Родительские классы не имеют понятия о дочерних классах. – duffymo

+0

«Юниор» не является «старшим», но каждый «старший» - «младший» + некоторый опыт. – Andrew

ответ

1
S = J; //aliasing ? 

Это просто назначение.

//J 0 S 1 
System.out.println (S.x); // should print 0 but prints 1 

Переменная, связанная с типом. Хотя основной объект дж, тип S (левая сторона)

J1 = (junior)S1; //Senior cannot be cast to junior, why? 

водитель Каждый грузовик водитель, но вы не можете сказать, каждый водитель водитель грузовика.

System.out.println (S1.x); 
System.out.println (J1.x);// should print 1 but prints 0 

Переменный для типа. Тип объекта - j. И переменная, относящаяся к J. Если вы хотите использовать супер переменную try super.x

+0

, это очень полезно, но если бы я должен был сказать J = J1; то свойства будут скопированы правильно? –

+0

@VarunNarayananChakravarthy «если бы я должен был сказать J = J1, тогда свойства будут скопированы правильно?» - Нет, ничего не копируется. 'J = J1' означает, что' J' теперь ссылается на тот же экземпляр, что и 'J1', а не копия этого экземпляра. Подумайте о ссылках Java как о каком-то указателе. – Thomas

+0

@ Томас, так это его наложение? –

2

Класс Child наследует все методы и свойства всего своего родительского класса. Но другой способ неверен, поскольку дочерний класс является тем, который расширяет базовый класс, а базовый класс не расширяет дочерний класс. Надеюсь, это помогло.

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

  • Нет связанных вопросов^_^