2016-07-09 16 views
2

Ich habe drei Klasse A, B, C Klasse B erstreckt A und Klasse C erstreckt B.Wie kann ich den Wert einer Variablen über das Schlüsselwort Super erhalten?

Ich mag, den Wert der ganzen Zahl in den aclass A und in class C diesen Wert gedruckt bekommen. Meine erste Wahl ist, über super Schlüsselwort zu drucken.

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); 
    } 
} 

Antwort

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

Mit Feldern mit den gleichen Namen mehrmals in einer Erbschaft hierarchie wird „versteckte Felder“ bezeichnet.

Der Zugriff auf Felder (und statische Methoden) basiert auf dem (statischen) Typ der verwendeten Referenz. Das heißt, wenn Sie den Verweis (hier das) den gewünschten Typ (in diesem Fall A) umwandeln und auf das Feld zugreifen, erhalten Sie das Feld, das zu A gehört.

Würde genauso funktionieren, wenn Sie C einem zuweisen Variable. Wenn die Variable vom Typ A ist, erhalten Sie A.a.

Wie dem auch sei: Bitte verwenden Sie keine versteckte Felder in der Produktion Code

+0

Dank Sie aloooot um Hilfe ... aber ich bin nicht in der Lage diesen Code zu verstehen ... mir bitte clerify ... –