读书人

父类摘引子类对象

发布时间: 2012-12-21 12:03:50 作者: rapoo

父类引用子类对象
学习过java的人都知道,java语言中存在向上转型和向下转型。向上转型是指从更具体的类型被引用为较抽象的类型,或者是表示范围小的向范围大的转化。如 father f=new son();或是long a=(long)n;后者的理解比较简单,C语言中已经讲的很明白了,重要的是分析前者。
父类引用子类对象的情况,一般是在实现和使用接口中使用,一是为了方便调用接口的方法,二是更好的处理接口实现的类。如下代码中的父类引用子类对象的例子。

class Father{ public String name="Father"; public Stirng getname(){    System.out.println("这是父类");    return name; }public  class Son extends Father{   Son()   { name="Son"; }   public String getname(){      System.out.println("这是子类");      return name;   }   public void setname(String name){        this.name=name;   }   public static void main(String[] args){      Father f=new Son();      System.out.println(f.name);      System.out.println(f.getname());      f.setname("Father);//出错       Son s=new Son();      System.out.println(f.name);      System.out.println(f.getname());      f.setname("Father);//正确              System.out.println(f.name);   }}结果输出:Father这是子类SonSon这是子类Father

上述结果的输出原因是父类引用子类后,由子类构造函数生成的父类引用,产生的实例只能调用父类的域和方法,如果子类覆盖了父类的方法,那调用的是子类的方法。所以引用后的实例不能调用子类自定义的方法。而后的s对象,已经很明了了。
此外java中,调用方法采用的是一种通信机制,即在f.getname()时,先通知相应的类,即父类Father,同时进入父类的空间。这时任何的域与方法都是该类的。
总之,父类引用子类时,只能调用父类的方法和域,不能调用子类的自定义方法。这也是向上转型方法的缺陷。

读书人网 >编程

热点推荐