java函数多态_Java 多态

本文深入探讨Java多态性,包括面向对象的三大特性——继承、封装和多态。多态主要体现在运行时,通过继承、重写和向上转型实现。运行时多态的实现条件包括继承关系、方法重写和父类引用指向子类对象。它增强了代码的扩展性和灵活性,减少了重复代码。同时,文章提到了编译时多态即函数重载,以及多态的两种实现形式:继承和接口。
摘要由CSDN通过智能技术生成

Java多态,在之前的向上转型的文章中已经介绍了使用场景和为什么要通过向上转型实现运行时多态,请先看文章:张舰:Java 向上转型和向下转型

这篇文章主要是总结一下Java多态的概念,具体的例子请参考向上转型那篇文章。

1、面向对象编程的三大特性

继承、封装和多态。

继承

继承的目的是为了少写重复代码。有一些类具有共同的特点,具体表现在有相同的成员属性和方法,将这些具有相同特征的成员属性和方法提炼出来,组成一个父类,子类继承这个父类,相同的成员属性和方法仅在父类里定义,子类可以直接使用,这样在子类里仅定义每个类独有的方法和成员属性,少写重复代码。

封装

封装隐藏了类的内部实现机制,对外仅提供公共的接口供外部对象使用,这样做的好处是解耦。试想一下当方法的内部实现机制改变了,但对外提供的接口没有改变,外部业务逻辑对类的内部实现不感知,这样及时升级或者优化了内部实现,也不会影响外部调用这个接口的业务逻辑。

多态

多态的目的也是为了少写重复代码,当方法的入参是引用时体现的更清晰。定义一个父类的引用,指向子类的对象,这个引用具体指向的是哪个子类在编译时不能确定,只有在运行时才能确定,这就是所谓的动态绑定。这样只写一份代码,就可以让引用指向不同子类的对象,让程序选择多个运行状态,增强了程序的扩展性。

2、多态的分类

多态分为编译时多态和运行时多态。

编译时多态

编译时多态是指函数重载。同名函数具有不同的参数列表(参数类型不同、参数个数不同或者二者都不同),这类函数就实现了函数重载。编译时多态是静态的,在编译期间根据实际调用方法的参数列表就能确定到底调用的是哪个函数。

运行时多态

运行时多态就是上面讲的动态绑定,在编译期间不能确定父类的引用指向的是具体哪个子类的对象,只有在程序实际运行时才能确定,我们这里讲的主要是运行时多态。

3、运行时多态的实现条件

运行时多态的三个必要条件:继承、重写和向上转型。继承:在多态中必须存在有继承关系的子类和父类;

重写:子类必须对父类的某些方法进行重写,这样父类的引用在调用这些方法时才会在运行时确定调用的是哪个子类的方法;

向上转型:必须存在父类的引用指向子类的对象,该引用不仅可以调用父类的成员和方法,也可以调用子类里重写了父类的方法,但是不能调用子类里有而父类里没有的方法。

4、运行时多态的实现形式

运行时多态的实现形式有两种:继承和接口,在向上转型中体现如下:接口:声明一个接口类型的引用,指向实现了该接口的类的对象,实现了该接口的类存在多个;

继承:声明一个父类的引用,指向子类对象,继承了该父类的子类存在多个。

接口的例子我懒得写了,继承的例子见向上转型那篇文章。

参考java提高篇(四)-----理解java的三大特性之多态 - chenssy - 博客园​www.cnblogs.comb0f52b3838c3e3918e2b75d2f99cc48e.png张舰:Java 向上转型和向下转型​zhuanlan.zhihu.comzhihu-card-default.svg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值