java 向下转型运行时错误_Java向上转型和向下转型

首先定义父类Animal,所有动物都有一个吃东西的方法;子类Dog还增加了一个叫的功能。

public classAnimal {public voideat() {

System.out.println("eat like an animal");

}

}

public class Dog extendsAnimal {

@Overridepublic voideat() {

System.out.println("eat like an dog");

}public voidbarking() {

System.out.println("dog like barking");

}

}

1、向上转型

向上转型(upcasting):子类引用的对象转换为父类类型。

向上转型转型时,父类指向子类引用对象会遗失除与父类对象共有的其他方法,也就是在转型过程中,子类的新方法都会遗失掉,在编译时,系统会提供找不到方法错误。

public classDemo {public static voidmain(String[] args) {//upcasting

Animal animal = newDog();

animal.eat();//animal.barking(); The method barking() is undefined for the type Animal

}

}

2、向下转型

在向下转型过程中,分为两种情况:

情况一:如果父类引用的对象的引用是指向的子类对象,那么在向下转型的过程中是安全的。也就是编译是不会出错误的。

情况二:如果父类引用的对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会出现java.lang.ClassCastException错误。它可以使用instanceof来避免出错此类错误。

public classDemo {public static voidmain(String[] args) {

Animal animal= newDog();//情况1

Dog dog1 =(Dog) animal;

dog1.eat();

dog1.barking();//情况2

Dog dog = (Dog) newAnimal();

dog.eat();

}

}

运行结果:

eat like an dog

dog like barking

Exception in thread "main" java.lang.ClassCastException: demo.Animal cannot be cast to demo.Dog

at demo.Demo.main(Demo.java:12)

总结:

1、 父类引用可以指向子类对象,子类引用不能指向父类对象。

2、 向上转型不用强制转型。

3、 向下转型要强制转型。

4、 Upcasting会丢失子类特有方法,子类重写的父类方法有效。

————————————————

版权声明:本文为CSDN博主「犁叔」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u012739535/article/details/45249853

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值