关于Java子类访问父类的私有变量

            为了测试,我写了三个java类, father.java  son.java test.java  专门来测试,关于局部变量,以及子类调用父类的私有变量。

            father.java 如下:

public class father{
    private int age = 50;
    void print(){
        System.out.println(age);
    }    
}
             son.java

class son extends father{
    private int age = 10;
}

             test.java

class test{
    public static void main(String args[]){
        son a = new son();
        a.print();
    }
}
生成了一个son的对象,利用它从父类基层的print,希望打印来自于子类的age, 而实际编译运行后的结果,它打印的是父类的age,如下:

sely@com:~/sylinux/father_son$ javac father.java son.java test.java 
sely@com:~/sylinux/father_son$ java test
50
从父类继承了,print方法,这个是毋庸置疑的,是否也继承了父类的private int age = 50 呢? 答案是肯定的!子类继承了所有父类中的东西。

对象模型应该是:

/----------------------------------------\ ==========================================
|         private int age = 10 ;         /                                        ||||
|                                        \                              S         ||||
|                                        /                                        ||||
|----------------------------------------\=======================                 ||||
|          private int age = 50 ;        /        P           |||       O         ||||
|          void print() ;                \        A           |||                 ||||
|                                        /        P           |||                 ||||
|                                        \        A           |||       N         ||||
\--------------------------------------- /====================|||=================||||

当我们吧son.java修改成这样的时候:

class son extends father{
    private int age = 10;
    void print(){                             //重写父类的方法
     System.out.println(age);
    }
}
对象模型就变成了这样:

/----------------------------------------\ ==========================================
|         private int age = 10 ;         /                                        ||||
|         void  print();                 \                              S         ||||
|                                        /                                        ||||
|----------------------------------------\=======================                 ||||
|          private int age = 50 ;        /        P           |||       O         ||||
|          void print() ;                \        A           |||                 ||||
|                                        /        P           |||                 ||||
|                                        \        A           |||       N         ||||
\--------------------------------------- /====================|||=================||||


在实际的调用过程中,发现对象实际是son的,就试图调用print()函数,当发现son的模型中没有属于自己的print()函数,就试图到父类所包含的print()空间中去查找调用,实际调用的是父类的print()方法。在父类的模型域中,自然就调用出了父类的age值了。个人理解,如果有误,请回复!

你可能感兴趣的:(关于Java子类访问父类的私有变量)