面向对象三大特性之多态

本文介绍了Java中多态的概念,强调了实现多态需要满足的三个条件:继承、方法重写和通过父类引用调用。讨论了方法重写与重载的区别,并详细阐述了向上转型的优势,如参数统一化,以及向下转型的注意事项。
摘要由CSDN通过智能技术生成

声明: 本文主要作为作者的复习笔记,由于作者水平有限,难免有错误和不准确之处,欢迎读者批评指正.

多态

同样的一个方法/行为,经过不同的对象,表现出不同的行为,这样的现象就称为多态;

多态性:两不同一相同

不同的对象,调用相同的方法,表现出不同的行为;
例如: 小猫和小狗,都吃宠物粮食,小猫吃猫粮,小狗吃狗粮;

Java中要想实现多态,必须同时满足以下三个条件,缺一不可:

  1. 多态的实现必须依赖继承,在继承体系下才有多态; 只有在继承关系的类之间才有多态可言;
  2. 子类必须要覆写父类中的方法;
  3. 通过父类的引用调用子类重写的方法;

方法重写(override)

有继承关系的类之间,子类定义了和父类除了权限不同以外,其他(方法名称,参数列表,返回值类型(向上转型除外))完全相同的方法称为子类重写了父类的方法,子类重写方法的权限 >= 父类方法;

方法重载(overload)

同一个类中,定义了一组方法名称相同,参数列表不同,与返回值无关的一组方法,称为重载方法;

为何重载没有提方法权限问题?
同一个类的内部,所有东西都是可见的,因此,与权限无关;

关于权限问题,子类重写的方法权限 >= 父类权限

如果父类方法是public修饰的,子类方法能用的权限只有public;
如果父类方法是default修饰的,子类方法能用的权限 >= default,也就是说子类使用default,protected,public;

私有方法、静态方法、构造方法都不存在方法重写

  • 重写就是在子类对象中修改了父类的原有方法的表现,以当前子类对象的方法为准;
  • 私有继承,子类压根不知道父类中有这个私有方法,何谈重写;所谓的重写,在父类的现有方法上进行覆盖,前提是子类首先得知道父类有这个方法;
  • 父类方法使用private,子类方法使用public(不存在重写);
  • static方法不存在重写; static和类绑定,与具体对象无关; 重写为了多态服务,多态最核心的是两不同一相同,不同的对象 => static没有对象,无法多态;
  • 构造方法不能重写; 假设能重写,相当于在子类中改变了父类构造方法方法的行为 => 在子类中决定父类如何产生?(举个例子,儿子可以改变父亲如何产生并设置属性值,当然是绝对不可能的!)

重写和重载的区别

区别点 重写(override) 重载(overload)
参数列表 一定不能修改 必须修改
返回类型 一定不能修改(除非可以构成父子类关系) 可以修改
访问限定符 一定不能做更严格的限制(可以降低限制) 可以修改

静态绑定 - 方法重载

编译时,编译器根据用户传参的不同决定到底调用的是哪个方法;

动态绑定 - 方法重写

例:

public static void fun(Animal animal){
   
	animal.eat();
}

编译时无法确定到底调用的是哪个对象的eat方法,只有在运行时,根据具体传入fun的对象,才能知道到底调用的是哪个对象的eat方法,这就叫动态绑定; 即运行时才明确调用的哪个方法;

向上转型

天然发生的向上转型,也是产生对象的主要使用方式;

<
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值