java中对象转换_java中的对象转换

用例子来说明:

package com.converttest;

class Animal {

Animal()

{

System.out.println("Animal constructor!");

}

public void eat()

{

System.out.println("Animal eat!");

}

}

class Bird extends Animal{

Bird()

{

System.out.println("Bird constructor!");

}

public void fly()

{

System.out.println("Bird fly!");

}

public  void eat()

{

System.out.println("Bird eat!");

}

}

class converttest {

public static void main(String[] args){

System.out.println("test case 1: ---------------!");

Animal a1 = new Animal();

Bird b1 = new Bird();

a1.eat();

b1.eat();

a1 = b1;  //OK, 隐式转换,子类实例向父类转换,相当于a1 = (Animal)b1;。

a1.eat(); //OK,调用的是子类的eat函数。

//a1.fly();           // error, fly 不是a1类型的。

//b1 = a1;            //error, 父类转向子类,没用强转,所以编译错误。

b1 = (Bird)a1;  //OK, 父类转向子类,用强转,所以编译正确。

b1.eat();       //OK, 调用的是子类的eat函数。

System.out.println("test case 2: ---------------!");

Animal a2 =  new Bird(); //OK, 隐式转换,子类实例向父类转换,相当于Animal a2 =  (Animal)new Bird();;。

a2.eat();

//a2.fly();  // error,Animal无法访问子类的fly函数。

//Bird b2 = new Animal();  //error, 父类转向子类,没用强转,所以编译错误。

Bird b2 = (Bird)new Animal();  //OK, 父类转向子类,必须用强转。

b2.eat(); //Exception in thread "mainException in thread "main" java." java.lang.ClassCastException:    com.interfacetest.Animal cannot be cast to com.interfacetest.Bird

//at com.interfacetest.converttest.main(interfacetest1.java:101)

b2.fly(); //Exception in thread "mainException"......

}

}

/* result:

test case 1: ---------------!

Animal constructor!

Animal constructor!

Bird constructor!

Animal eat!

Bird eat!

Bird eat!

Bird eat!

test case 2: ---------------!

Animal constructor!

Bird constructor!

Bird eat!

Animal constructor!

Exception in thread "main" java.lang.ClassCastException: com.interfacetest.Animal cannot be cast to com.interfacetest.Bird

at com.interfacetest.converttest.main(interfacetest1.java:101)

*/

说明: 1. 子类向父类会自动进行隐式转换,是类型安全的;

2. 父类向子类要用强制转换,但类型不安全.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值