多态性不适合继承链中的实例变量

来源:互联网 发布:淘宝旺旺可以改名字吗 编辑:程序博客网 时间:2024/05/16 15:06

多态性不适合继承链中的实例变量

   在初学Java程序设计的时候,教材上有这样一个程序是讲“多态性不适合继承链中的实例变量”的。

class  Base{int x=1;void print(){System.out.println("当前类为:"+this.getClass().getName());System.out.println("对象的 x="+this.x);}}class Derived extendsBase{int x=2;void print(){System.out.println("当前类为:"+this.getClass().getName());System.out.println("对象的 x="+this.x);}void out(){System.out.println("OK!");}}public class Confusions{public static void main(String[] args){Base obj=new Derived();obj.print();System.out.println("对象的 x="+obj.x);}}
运行结果如下:


    分析一下程序,其实主要涉及到Java的继承与覆盖(域的隐藏),以及对象的类型转换(向上类型转换)的相关知识点。

 1、域的隐藏:

    

    2、向上类型转换:从子类移到父类,这是安全的(从一个特殊类型转换到一个通用类型)。唯一的问题就是可能丢失在子类中定义的方法和变量。(eg. 在上面的程序中如果通过obj调用out()方法,将产生编译错误)。

0 0
原创粉丝点击