【Java探索之旅】多态:重写、动静态绑定

简介: 【Java探索之旅】多态:重写、动静态绑定

📑前言

面向对象编程中,重写和动静态绑定是重要的概念,影响着代码的执行流程和行为。通过重写,子类可以重新实现父类的方法,实现个性化的行为;而动静态绑定则决定了方法调用时的具体行为。本文将深入探讨重写的规则、设计原则以及动静态绑定的概念和条件,帮助您更好地理解和运用这些概念在Java编程中的重要性和实际应用。

一、重写

1.1 概念

重写(override):

也称为覆盖。重写是子类对父类非静态、非private修饰,非final修饰,非构造方法等的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。 也就是说子类能够根据需要实现父类的方法。

1.2 方法重写的规则


子类在重写父类的方法时,一般必须与父类方法原型一致: 返回值类型 方法名 (参数列表) 要完全一致


被重写的方法返回值类型可以不同,但是必须是具有父子关系的

    父类被static、private修饰的方法、构造方法都不能被重写。


    重写的方法, 可以使用 @Override 注解来显式指定. 有了这个注解能帮我们进行一些合法性校验. 例如不小心将方法名字拼写错了 (比如写成 aet), 那么此时编译器就会发现父类中没有 aet 方法, 就会编译报错, 提示无法构成重写

    1.3 重写和重载的区别

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

    方法重载是一个类的多态性表现,而方法重写是子类与父类的一种多态性表现

    1.4 重写的设计原则

    对于已经投入使用的类,尽量不要进行修改。最好的方式是:重新定义一个新的类,来重复利用其中共性的内容,并且添加或者改动新的内容。

    二、动静态绑定

    2.1 静态绑定:

    也称为前期绑定(早绑定),即在编译时,根据用户所传递实参类型就确定了具体调用那个方法。典型代表函数重载。

    静态绑定的条件包括:

    1. 变量的声明类型:静态绑定是根据变量的声明类型来决定调用哪个方法。因此,变量的声明类型必须是确定的,不能是多态类型。
    2. 编译时类型确定:在编译阶段,编译器会根据变量的声明类型来确定调用的方法,而不考虑实际运行时的对象类型。

    2.2 动态绑定:

    也称为后期绑定(晚绑定),即在编译时,不能确定方法的行为,需要等到程序运行时,才能够确定具体调用那个类的方法。

    动态绑定的条件包括:

    1. 方法的重写:动态绑定需要存在父类和子类之间的方法重写,即子类重写了父类的方法。
    2. 发生向上转型:Animal animal = new Dog
    3. 父类引用:通过父类引用来调用父类和子类的重写方法。

    🌤️全篇总结

    通过本篇你已经了解了重写和动静态绑定在面向对象编程中的重要性和实现条件。重写可以让子类根据需要重新定义父类的方法,实现个性化的行为;而动静态绑定则决定了方法调用时的具体行为,静态绑定在编译时确定调用方法,而动态绑定在运行时确定调用方法。


    目录
    相关文章
    |
    3月前
    |
    算法 Java 程序员
    在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
    在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
    69 9
    |
    3月前
    |
    Java 开发者
    在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
    在Java面向对象编程的广阔海洋中,多态犹如一股深邃的潜流,它推动着代码从单一走向多元,从僵化迈向灵活。
    42 7
    |
    3月前
    |
    Java 开发者
    那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
    那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
    48 5
    |
    3月前
    |
    Java 程序员
    让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
    让我们一起探讨Java多态的奥秘,看看它是如何打破“一刀切”的局限,让我们的代码更加生动多彩
    42 5
    |
    30天前
    |
    存储 Java 测试技术
    Java零基础-多态详解
    【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
    21 4
    |
    1月前
    |
    Java 编译器 程序员
    Java多态背后的秘密:动态绑定如何工作?
    本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
    39 4
    |
    2月前
    |
    Java 编译器
    封装,继承,多态【Java面向对象知识回顾①】
    本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
    封装,继承,多态【Java面向对象知识回顾①】
    |
    1月前
    |
    Java 编译器
    在Java中,关于final、static关键字与方法的重写和继承【易错点】
    在Java中,关于final、static关键字与方法的重写和继承【易错点】
    22 5
    |
    1月前
    |
    Java
    java继承和多态详解
    java继承和多态详解
    42 5
    |
    1月前
    |
    存储 Java 测试技术
    Java零基础-多态详解
    【10月更文挑战第1天】Java零基础教学篇,手把手实践教学!
    26 1