Java:面向对象:多态,对象类型强制转换

多态

多态是在继承/实现情况下的一种现象,表现为:对象多态、行为多态

多态的前提:

  • 继承/实现关系
  • 存在父类引用子类对象
        People p1 = new Teacher();
        People p2 = new Student();
  • 存在方法重写(eg.子类重写父类run())

对象多态

//对象多态
        People p1 = new Teacher();
        People p2 = new Student();

行为多态

//行为多态
        p1.run();
        p2.run();

使用多态的好处

People p1 = new Teacher();
  • 右边对象是解耦合,更便于维护和拓展
  • 定义方法时,使用父类类型的形参,可以接收一切子类对象,拓展性更强、更便利。
    eg.school()方法定义接收的变量是父类型People,但是调用传参数时,可以传子类型Teacher和Student类型
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

子类父类 类型转换

自动类型转换

        People p1 = new Teacher();
        People p2 = new Student();

强制类型转换

  • 存在继承/实现关系就可以在编译阶段进行强制类型转换,编译阶段不会报错,但是运行阶段可能会报错
  • (可能指的是:运行时如果发现对象的真实类型与强转后的类型不同)
  • (就是你写代码时不会标红,但是运行不成功,可能会有类型转换异常ClassCastException)

如下:
编译不报错
在这里插入图片描述
运行出错:
在这里插入图片描述

p instanceof Teacher

我们为了防止这种错误出现,使用:== p instanceof Teacher==,检查对象p是不是Teacher类型,这个返回的是boolean类型
在这里插入图片描述
在这里插入图片描述

多态下,父类对象不能调用子类独有的方法

eg.People类没有study(),这个方法是Student类独有的,此时就会报错
在这里插入图片描述
因此使用上面的强制类型转换,把p2 instanceof Student,强转为Student类型就能调用Study()方法了
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值