为了测试,我写了三个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;
}
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值了。个人理解,如果有误,请回复!