对象类型转换的总结

看下面一条例子!
 
import java.lang.*;
public class j02090504
{
  public static void main(String para[])
  {
    A obj1 ;  
    System.out.println("A 对象引用 A 实例");
    obj1 = new A();
    obj1.printX();
    //((B)obj1).test();   //执行时期例外,obj1 之实例不满足 B 类,但在编译时期不会发现
    System.out.println("obj1.Y = " + obj1.Y );  // A 定义的 Y
   
    System.out.println("==========================="); 
    System.out.println("(A)B==> A 对象引用 B 实例");  
    obj1 = (A)( new B());
      // 通常不需自己作此转型,因 obj1 = new B() 能自动转型  
    obj1.printX(); // 唤起的是 B 的 printX() 方法实现  
    //obj1.test();   //编译错误,A 类没有 test() 方法
    System.out.println("obj1.Y = " + obj1.Y );   
    System.out.println("将 A 类之对象引用转型为 B ...");
    ((B)obj1).printX();
      // 唤起的是 B 的 printX() 方法实现,前者与之同,不需这样做  
    ((B)obj1).test();   // 转为 B 类就有 test() 方法   
    System.out.println("((B)obj1).Y = " + ((B)obj1).Y );
   
    System.out.println("===========================");   
    //B testObj = (B)new A();  //执行时期例外,A 类之实例不满足 B 类
    System.out.println("(B)((A)B)==> B 对象引用 B 实例"); // B对象实例
    B obj2 = (B)obj1;  
      // obj1 目前引用 B 类之实例,其对象引用可转为 B 类
    obj2.printX();
    obj2.test(); 
    System.out.println("obj2.Y = " + obj2.Y );  // B 类定义的 Y
    System.out.println("将 B 类之对象引用转型为 A ...");
    ((A)obj2).printX();  //唤起的还是 B 的 printX() 方法实现
    //((A)obj2).test(); //编译错误,A 类没有 test() 方法
    System.out.println("((A)obj2).Y = " + ((A)obj2).Y );  // A 类定义的 Y
  }
}
class A
{
  int X = 199;
  int Y = 333;
  public void printX()
  {
   System.out.println("X+100 = " + (X+100) );
  }
}
class B extends A
{
  double X =255.51;
  double Y = 11.23;
  public void printX()
  {
   System.out.println("X = " + X );
  }
  public void test()
  {
    System.out.println("test() in B");  
  }

看完后搞出结果的心得是:
1、转型无妨,但是否可以调用该引用所指的对像中的变最要看最原始New的
那一个对像是哪一个类的。
 2、不可将父类的实例转型为子类?因为父类不满足子类。
而子类可转型为父类,因为子类有父类的结构。而此时父类的引用可以引用
子类的变量(因为Override!!!!)。
 
最后,总结了一下。问题是出现在一个实例在创建时的类型上啊!
我们可以看到整个主程序里,一共出现了两次创建新类的语句,见有色部分既New语句。
得出以下结论:
一、若New出来的对象是父类类型,不能将父类类型转为子类类型。
二、若New出来的对象是子类类型,可以将其转为父类类型。而且该引用存
取的变量是子类定义的,原因为Override了。但是引用父类没有而子类有的变量
时出错原因是父类没有这样的变量,别忘了我们把子类转成了父类了。这么一来,这种情况就很清楚啦。
(即按照用父类一样地用子类。而子类超出父类的东西不能用。呵呵,这就是父类引用引用子类实例的实质,不过就一句话!)
而这样的父类类型可以再转成子类类型,只不过是子类回到来原来的状态罢了。
到此为止,类型转换的情况一清二楚。
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值