2016-07-09 8 views
2

меня есть три класса A, B, C класс В расширяет и расширяет класс С Б.Как я могу получить значение переменной через ключевое слово Супер?

Я хочу, чтобы получить значение целочисленного a, присутствующего в class A и распечатать это значение в class C. Мой первый выбор - распечатать ключевое слово super.

package testee; 
import java.util.Scanner; 


public class Testee { 

    public static void main(String[] args) { 

     new C(); 

    } 
} 


class A{ 

    int a=10; 

    A(){ 

     System.out.println(a); 
    } 

} 


class B extends A{ 

    int a=13; 

    B(){ 

     System.out.println(a); 
    } 

} 


class C extends B{ 

    int a=21; 

    C(){ 

     System.out.println(super.a); 
    } 
} 

ответ

3
System.out.println(((A)this).a); 

Имея поля с таким же именем несколько раз в наследство hierarchie называется «скрытые поля».

Доступ к полям (и статическим методам) основан на (статическом) типе используемой ссылки. Таким образом, если вы добавите ссылку (здесь это) нужный вам тип (в этом случае A) и получите доступ к полю, вы получите поле, которое принадлежит A.

Будет работать так же, если вы назначаете C в переменная. Если переменная имеет тип A, вы получите A.a.

В любом случае: пожалуйста, не используйте скрытые поля в рабочем коде

+0

Спасибо вам aloooot за помощь ... но я не могу понять этот код ... пожалуйста clerify меня ... –