Java多态

1、背景知识

  • Java是面向对象的语言,在Java中一切都是对象。Java具有OOP语言所具有的一切特性:封装、继承和多态。

  • 多态是面向对象程序设计中一个非常重要的特性,理解了多态后能够很好地进行面向对象的分析与设计。

2、何为多态

多态是同一个行为具有多个不同表现形式或形态的能力。

多态就是同一个接口,使用不同的实例而执行不同操作。

如何理解?

多态性是对象多种表现形式的体现

例如现实中,比如我们按下 F1 键这个动作:

  • 如果当前在 Flash 界面下弹出的就是 AS 3 的帮助文档;
  • 如果当前在 Word 下弹出的就是 Word 帮助;
  • 在 Windows 下弹出的就是 Windows 帮助和支持。

同一个事件发生在不同的对象上会产生不同的结果。

再假设我们现在存在一个基类Animal,两个派生类dog和cat

如果对于任一我想要输入的动物名字,输出对应的动物图片,没有多态,我需要一个一个去判断

如果运用多态,则可以直接通过输入名字来找到相应的动物 

3、多态存在的三个必要条件

  • 继承

  • 重写

  • 基类引用指向派生类对象

比如

Parent p = new Child();

​ 注:当使用多态方式调用方法时,首先检查基类中是否有该方法,如果没有,则编译错误;如果有,再去调用派生类的同名方法。

 多态运用实例:

另外,运用多态还需要注意的点:

1. 多态情况下,子父类存在同名的成员变量时,访问的是父类的成员变量。
2. 多态情况下,子父类存在同名的非静态的成员函数时,访问的是子类的成员函数。
3. 多态情况下,子父类存在同名的静态的成员函数时,访问的是父类的成员函数。
4. 多态情况下,不能访问子类特有的成员。
总结:多态情况下,子父类存在同名的成员时,访问的都是父类成员,除了在同名非静态函数时才是访问子类的


 4、多态的好处

  • 1. 消除类型之间的耦合关系
  • 2. 可替换性
  • 3. 可扩充性
  • 4. 接口性
  • 5. 灵活性
  • 6. 简化性
  • 7.提高了代码的拓展性

 5、多态中的重载和重写

一、重写(Overriding)的基本规则

  • 参数必须要一样,且返回类型必须兼容

  • 不能降低方法存取的极限

  • 基类的成员方法只能被它的派生类重写。

  • 声明为 final 的方法不能被重写。

  • 声明为 static 的方法不能被重写,但是能够被再次声明。

  • 构造方法不能被重写。

  • 如果不能继承一个方法,那么它一定不能被重写

  • 当需要在派生类中调用基类的被重写方法时,要使用 super 关键字。

二、重载(Overloading)的基本规则

  • 返回类型可以不同

  • 不能只改变返回类型

  • 可以更改存储权限

  • 方法能够在同一个类中或者在一个派生类中被重载。

三、两者的区别

区别点重载方法重写方法
参数列表必须修改一定不能修改
返回类型可以修改一定不能修改
异常可以修改可以减少或删除,一定不能抛出新的或者更广的异常
访问可以修改一定不能做更严格的限制(可以降低限制)

 一张形象的网图

6、知识总结

类型把对象分成组,并且管理着这些对象的接口。类型的继承层次结构决定了实现多态所需的类型关系。另外,实现的细节并不影响子类型多态的层次结构。类型决定了对象调用什么方法,而实 现则决定了对象怎么执行这个方法。也就是说,类型表明了责任,而负责实施的则是具体的实现。将实现和类型分离后,我们好像看到了这两个部分在一起跳舞,类型决定了他的舞伴和舞蹈的名字,而实现则是舞蹈动作的设计师。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值