父类声明,子类实例化(强制类型转换导致异常ClassCastException)

本文详细阐述了Java中多态的使用原因与要点,包括父类声明子类实例化的应用场景,以及向上转型与向下转型的概念与操作细节。通过具体案例说明了如何在实际编程中运用多态特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、使用原因

父类声明,子类实例化,既可以使用子类强大的功能,又可以抽取父类的共性。

 

二、使用要点

1.父类类型的引用可以调用父类中定义的所有属性和方法;

2.父类中方法只有在是父类中定义而在子类中没有重写的情况下,才可以被父类类型的引用调用;

3.对于父类中定义的非静态方法,如果子类中重写了该方法(动态绑定:重写后的方法),那么父类类型的引用将会调用子类中的这个方法,静态方法还是调用父类的(静态绑定:静态方法)

4.父类和子类声明同名的成员变量,获得的是父类的成员变量(静态绑定:成员变量);

5.无法调用子类特有的方法,即非重写父类方法所得到的方法,除非进行向下转型,且向下转换的类型必须是之前进行向上转型时的类型,具体可以看下面的案例。

 

 三、案例

父类:pet   子类:Cat  Dog...

1.向上转型

Pet cat1 = new Cat(); // 父类声明,子类实现

2.向下转型

Cat cat2 = (Cat)cat1; // 将子类实现的父类声明转为子类声明

因为原先的子类cat,所以只能转为子类Cat的声明,不能是Dog或其他子类的,否则会导致运行时异常:ClassCastException。为避免可先通过instanceof判断类型是否相同,再进行转换,且进行向下转型的前提的是事先进行了向上转型

转载于:https://www.cnblogs.com/YeHuan/p/10515938.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值