java网课|多态

P185 多态的概述

多态性的前提:extends继承/implements实现

究竟什么是多态性?

如:
人类–》学生类

  • 小明是【学生类】对象
  • 小明既是【学生】
  • 也是【人类】
  • 有【多种形态】====》对象的多态性

P186 多态的格式与使用

格式:

**父类名称 对象名 = new 子类名称();
接口名称 对象名 = new 实现类名称(); **

即:父类引用指向子类对象

public static void main(String[]args){
	//使用多态的写法
	//左侧父类的引用,指向了右侧子类的对象
	Fu obj=new Zi();
	obj.method();//出来的是子类方法method
	obj.methodFu();//出来的是父类方法

子类会被当成父类使用

P187 多态中成员变量的使用特点

要知道【访问成员变量的两种方式】:

  • 直接通过【对象名称访问成员变量】:【等号左边】是谁优先用谁,没有就向上找
  • 间接通过【成员方法访问成员变量】:【方法属于谁】就用谁的,没有就向上找
  •  	关于【属于谁】:若子类中重写了,那就属于子类,否则还是属于父类
    
Fu obj=new Zi();//Fu类对象obj指向子类
obj.num=10;//用的是---obj(Fu类中的num)

P188 多态中成员方法的使用特点

成员方法的访问规则:

  • 看new的是谁,就优先用谁,没有则向上找
  • 口诀:编译看左边,运行看右边

在这里插入图片描述
对比:

  • 【成员变量】编译、运行都看左边
  • 【成员方法】编译看左边,运行看右边

网友说:子类有重写,才能用子类,否则用父类(存疑

P189 使用多态的好处

为啥要让Fu类掺和进来呢?

  • 前情提要:继承和实现都能作为多态的前提

解答:

  • 当父类只想调用两个子类的实现方法,而不管各自怎么实现时用多态很方便

在这里插入图片描述
好处:无论右边new的时候换成哪个子类对象,等号左边调用方法都不会变化

  • 即:new A/B/C 下一行都是one.work();//one就是employee类型

P190 对象的向上转型

其实就是多态写法(父类引用指向子类对象):

  • 父类名称 对象名 = new 子类名称();

理解:右侧创建一个子类对象,把它当作父类来看待使用

在这里插入图片描述
(向上转型示例图)

【向上转型一定是安全的】

  • ∵从小范围转向大范围(安全
double num=100//正确的✔,int---》double,自动类型转换

P191 对象向下转型

向上转型的弊端:

一旦向上转型为父类,就无法调用子类原本特有的内容
在这里插入图片描述
cat已经向上转型了,animal不能再调用catchmouse()

向下转型==【还原】:

本来是a,才能称为【还原】
格式:

  • 子类名称 对象名 = (子类名称)父类对象;//像强制类型转化的格式!!
  • 含义:将父类对象还原为本来的子类对象
    在这里插入图片描述
Animal animal=new Cat();//注意new的是一只猫!
animal.eat();//猫吃鱼

//animal.catchMouse();//错误写法!

//向下转型,进行“还原”动作
Cat cat=(Cat)animal;
cat.catchMouse();//向下转型,进行“还原”动作

//看一个错误的向下转型
//本来new的是一只猫,现在非要当作一只狗
//Dog dog=(Dog)animal;//大错特错!!

(报错:ClassCastException)

P192 instanceof关键词进行类型判断

如何知道一个父类引用的对象,本来是什么子类?

对象 instanceof 类名称

  • 返回的一个boolean值
//如果希望调用子类特有方法,需要向下转型
if(animal instanceof Dog){//判断父类引用animal本来是不是Dog
	Dog dog=(Dog) animal;
	dog.watchHouse();
}
if(animal instanceof Cat){
	Cat cat=(Cat)animal;
	cat.eatfish();
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值