Java基础2-2:多态

一、前言

  本文内容摘自《深入理解Java核心技术:写给Java工程师的干货笔记(基础篇)》一书,2022年出版,作者 张洪亮(@Hollis),阿里巴巴技术专家,著有《Java工程师成神之路》系列文章,《Java工程师成神之路》电子书已开源,可在阿里云开发者社区免费下载。书籍内容比电子书内容要丰富,内容有修改,有需要的读者可以购买正版书籍。
 
  【如何成神:先搬砖,再砌砖,后造砖!】
 
  本文由 @大白有点菜 原创,请勿盗用,转载请说明出处!如果觉得文章还不错,请点点赞,加关注,谢谢!

  《Java工程师成神之路》下载地址为:
  https://developer.aliyun.com/ebook/395?spm=a2c6h.20345107.ebook-index.24.4c927863j10ats

深入理解Java核心技术:写给Java工程师的干货笔记(基础篇) 

二、第2章 面向对象的核心概念【多态】

  多态(Polymorphism):指为不同数据类型的实体提供统一的接口,或者使用一个单一的符号来表示多种不同的类型。多态有以下几类。
 

1、特设多态:程序设计语言中的一种多态,多态函数有多个不同的实现,依赖于其实参而调用相应版本的函数。应用场景函数重载运算符重载
 
2、参数多态:在程序设计语言与类型论中,参数多态是指声明与定义函数、复合类型、变量时不指定其具体的类型,而把这部分类型作为参数使用,使得该定义对各种具体类型都适用。应用场景泛型函数式编程
 
3、子类型多态:在面向对象程序设计中,当计算机程序运行时,相同的消息可能会发送给多个不同类别的对象,而系统依据对象的所属类别,触发对应类别的方法,产生不同的行为。应用场景Java中常见的多态
 
【Java中的多态(动态多态)】
 
  Java中多态的概念:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。
 
  Java中的多态其实是一种运行期的状态,需要满足三个条件:

  • 有类继承或者接口实现。
  • 子类要重写父类的方法。
  • 父类的引用指向子类的对象。

 
多态例子(书中例子,有改动)
 
核心代码:

/**
 * 父母类
 */
public class Parent {
    public void call() {
        System.out.println("我是父母");
    }
}
/**
 * 儿子类
 */
public class Son extends Parent {
    /**
     * 儿子类要重写父母类的方法
     */
    @Override
    public void call() {
        System.out.println("我是儿子");
    }
}
/**
 * 女儿类
 */
public class Daughter extends Parent {
    /**
     * 女儿类要重写父母类的方法
     */
    @Override
    public void call() {
        System.out.println("我是女儿");
    }
}

 
主函数:

public class PolymorphismApp {
    public static void main(String[] args) {
        Parent p1 = new Son();
        System.out.println("**********我是分割线1**********");
        p1.call();
        Parent p2 = new Daughter();
        System.out.println("**********我是分割线2**********");
        p2.call();
    }
}

 
运行结果:

D:\Develop\JDK\jdk1.8.0_281\bin\java.exe
**********我是分割线1**********
我是儿子
**********我是分割线2**********
我是女儿

Process finished with exit code 0

 
  同样是Parent类的实例,p1.call() 调用的是Son类的实现,p2.call()调用的是Daughter类的实现。
 
  有人说,你自己定义时不就已经知道p1是Son,p2是Daughter了吗?但是,有时候用到的对象并不都是自己声明的,比如Spring中基于IoC创建的对象,在使用时就不知道这个对象是谁,或者说你可以不用关心这个对象是谁,而是根据具体情况而定。

IoC是 Inversion of Control 的缩写,即控制反转,它是一种设计思想,意味着将设计好的对象交给容器控制,而不是在对象内部直接控制。
 
换句话说,当我们使用Spring框架时,对象是Spring容器创建出来并由容器进行管理的,只需要使用就行了。

 
【静态多态】
  前面的动态绑定被认为是动态多态,因为只有在运行期才知道真正调用的是哪个类的方法。还有静态多态,一般认为函数重载是静态多态,因为需要在编译期决定具体调用哪个方法。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大白有点菜

你的鼓励决定文章的质量

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值