现在的位置: 首页 > 综合 > 正文

java 子类与父类 转换

2013年08月11日 ⁄ 综合 ⁄ 共 829字 ⁄ 字号 评论关闭

父类对象不能强转为子类对象,子类可以转为父类。
能转,是因为它确实是。
不能转,是因为它不是。

----------------------------------------------------------------------

B extends A

A a = new B();   
B b = (B)a;

这里的new B()本身就是子类的对象,只是使用了父类的引用a指向它!

class A   

{   
    public void print()   
    {   
 
System.out.println("A.func1");   

    }   
}  

 
class B extends A   
{   
     public void print()   
    {   
 
System.out.println("B.func1");   

     }   
}   

   子类可以以父类的身份出现( A a=new B();)但做事情时还是按自己的方法做:a.func1()输出的结果是"B.func1"
   父类不可以以子类身份出现(B b=new A();),因为会报向下转型异常.

  Java的强制转换是用在当子类对象上传给父类后,需要重新获取子类对象时,使用下传,将对象强制装换成子类对象。也就是说原先的对象最开始就是子类的,只是在上传的时候丢失了具体的类型。

  现在你想将父类的对象转换成子类的对象,这是不可能的,在每个类中都有一个Class类,来存放每个类的具体信息,这样保证类在上传和下传时都能找到最原始的类。
  Structs里面ActionFrom中真正传入的是子类的对象,只是把它上传给了一个父类的引用,所以这个对象的Class类存放的是子类的信息,强制转换成子类,当然是可以的。就像是:Father a = new Son();Son b = (Son)a;

  而如果是你现在是想把Father a = new Father();Son b = (Son)a;这是完全不同的,前者Class中存放的是子类的信息(包括一些方法、变量和块),后者存放的是父类的信息。
 

抱歉!评论已关闭.