WEB开发网
开发学院WEB开发Jsp Java中的上下转型 阅读

Java中的上下转型

 2009-11-06 21:01:22 来源:WEB开发网   
核心提示:见下边的程序段package test; class A { public String f(A obj) { return("A"); } } class B extends A { public String f(B obj) { return("C"); } public
见下边的程序段

package test;
class A {
  public String f(A obj)
  {
    return("A");
  }
}
class B extends A {
  public String f(B obj)
  {
    return("C");
  }
  public String f(A obj)
  {
    return("D");
  }
}

我们使用子类创建一个对象:

B b = new B();

然后再将这个子类的引用放到父类对象中:

A a;

a = b;

那么这个父类对象a是子类对象b的上转型对象,对象的实体由子类负责建立,实质还是子类,只是损失了一些功能而已,这样的得失具体如下:

得:上转型对象可以操作和使用子类继承或者重写的方法。

失:上转型对象丧失了对子类新增成员变量或新增的方法的操作和使用。

那么下边的这段测试代码的打印结果就是“D”,因为a2只能有public String f(A obj) 这个方法是可以用的。

public class TestObj
{
  public static void main(String args[])
  { A a1 = new A();
    A a2 = new B(); //子类对象转化为父类,称为上转型,不需要强制转换。

    B b = new B();
    System.out.PRintln(a2.f(b)); //“D”

    System.out.println();

     if (a2 instanceof B) {
       B b1 = (B) a2; //父类对象转化为下转型,此时需要使用强制转换,此时需要先判断要转换的这个对象(也就是a2指向的这个对象)是不是B类的实例
      System.out.println(b1.f(b));//"C"
      System.out.println(b1.f(a1));//"D"
    }
  }
} 

其实,java 转型问题其实并不复杂,只要记住一句话:父类引用指向子类对象。

另外说说向上转型的作用:由于向上转型的作用,在要传入子类实例的时候,我们可以方便的将父类实例作为参数定义在方法的传入参数上,这样不用利用多态特性进行方法的重载了。其实向上转型也是一种多态特性的体现。

Tags:Java 上下 转型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接