2016-07-09 33 views
2

我有三个类ABC类B扩展A和C类扩展B.如何通过超级关键字获取变量的值?

我想目前在class A整数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.a.

总之:请不要在生产代码中使用隐藏域

+0

感谢您aloooot的帮助......但我无法理解这段代码...请clerify我... –