java基础--多态-域与静态方法1(java编程思想)

来源:互联网 发布:mac自带字典格式 编辑:程序博客网 时间:2024/06/05 17:06
看以下例子:

package extendsTest;/** *  * @author xiaoyu * */class Super{public int field=0;public int getField(){return field;}}class Sub extends Super{public int field=1;public int getField(){return field;}public int getSuperField(){return super.field;}}public class TestExtendsField {public static void main(String args[]){Super super1=new Sub();System.out.println(super1.field+";"+super1.getField()+";");Sub sub=new Sub();System.out.println(sub.field+";"+sub.getField()+";"+sub.getSuperField());}}



输出结果:

0;1;
1;1;0

结果分析:当Sub转型为Super引用时,任何域访问操作都将由编译器解析,因此不再是多态的。本例中,

为Super.field和Sub.field分配了不同的存储空间。

这样,Sub实际上包含了两个field;它自己的和它从Super处得到的,然而在Sub中的field时所产生的默认域并非Super.field。

因此为了得到Super.field,必须显示的指明super.field.