Java-多态

多态的概念

当父类的引用所指向的对象不同的时候,表现出的行为是不一样的!

满足多态的条件

1.继承

父类:
在这里插入图片描述
Dog子类:
在这里插入图片描述

Brid子类:
在这里插入图片描述

2.向上转型(发生多态的前提)

把子类对象给父类

向上转型三种方式;
1.

在这里插入图片描述
父类引用子类对象,此时父类animal这个引用指向了Dog这个对象.

在这里插入图片描述

在这里插入图片描述
这个方式把子类dog引用传递给func1这个函数并用父类animal形参引用接收,这个过程发生了向上转型,

在这里插入图片描述
在main方法中调用了func2函数并用父类animal引用接收其函数的返回值,这个过程发生了向上转型

前提:一定是在继承关系上才能向上转型!!
当发生向上转型后,父类的引用只能访问父类自己的成员,不能直接访问子类特有的成员!!!

如:

在这里插入图片描述

3.重写

子类重写父类的方法

父类的:
在这里插入图片描述

Dog子类重写父类的eat方法:
在这里插入图片描述
Bird子类重写父类的eat方法:
在这里插入图片描述

@Override:这个是重写的注解,表示这个方法被重写了,(可加可不加),加上注解可以让代码多一层校验

重写需要注意的:

1.重写的方法的 返回类型,方法名,参数 一致

2.重写的方法需是:非Static 非final 非private 修饰的方法

3,重写的方法的访问权限要大于等于父类方法的访问权限 :
private < 默认权限 < protected < public

最后执行 main方法:

此时站在我的funcTion方法中的形参animal角度来说是不知道将来要引用的是那个对象,但可以确定的是当父类引用不同对象的时候所表现的行为是不一样的!!!

最后输出的结果:
在这里插入图片描述

动态绑定(多态的基础):

把子类对象传给funcTion方法时用父类引用接收(向上转型),然后调用父类的eat方法,但是当我们看到运行结果的时候,发现调用的是子类重写父类的eat方法!!!
此时这里发生了动态绑定也就是说:在程序运行的过程中父类引用调用了子类重写父类的方法!!


一些边边角角的知识点:

重写与重载的区别:

在这里插入图片描述

向下转型(不安全)

把父类对象给子类
在这里插入图片描述

在这里插入图片描述
结果为:
在这里插入图片描述

在画红框的代码中发生了向下转型(强制类型转换成Dog类),并用dog引用接收

当代码发生下面变化:
在这里插入图片描述
当运行代码是会发现代码报错了:
在这里插入图片描述
这表示Dog类不能转换为Bird类型
观察上面代码发现animal引用已经引用了Dog类,而Dog类是不能转换成Bird类的

此时可以这样写:
在这里插入图片描述

为了提高向下转型的安全性可以使用 instanceof 关键字
这行代码可以理解为:animal 这个引用是不是引用了Bird这个类的对象,如果为ture将执行下面的代码,如果为false则不执行.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值