【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. 父类引用:通过父类引用来调用父类和子类的重写方法。

    🌤️全篇总结

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


    目录
    相关文章
    |
    算法 Java 程序员
    在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
    在Java的编程世界里,多态不仅仅是一种代码层面的技术,它是思想的碰撞,是程序员对现实世界复杂性的抽象映射,是对软件设计哲学的深刻领悟。
    256 9
    |
    Java 开发者
    那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
    那些年,我们一同踏入Java编程的大门,多态,这个充满魔法的名字,曾无数次点亮我们探索面向对象编程的热情。
    126 5
    |
    10月前
    |
    Java 编译器 程序员
    java中重载和多态的区别
    本文详细解析了面向对象编程中多态与重载的概念及其关系。多态是OOP的核心,分为编译时多态(静态多态)和运行时多态(动态多态)。编译时多态主要通过方法重载和运算符重载实现,如Java中的同名方法因参数不同而区分;运行时多态则依赖继承和方法重写,通过父类引用调用子类方法实现。重载是多态的一种形式,专注于方法签名的多样性,提升代码可读性。两者结合增强了程序灵活性与扩展性,帮助开发者更好地实现代码复用。
    482 0
    |
    移动开发 前端开发 Java
    Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
    JavaFX是Java的下一代图形用户界面工具包。JavaFX是一组图形和媒体API,我们可以用它们来创建和部署富客户端应用程序。 JavaFX允许开发人员快速构建丰富的跨平台应用程序,允许开发人员在单个编程接口中组合图形,动画和UI控件。本文详细介绍了JavaFx的常见用法,相信读完本教程你一定有所收获!
    12991 5
    Java最新图形化界面开发技术——JavaFx教程(含UI控件用法介绍、属性绑定、事件监听、FXML)
    |
    Java
    Java 面向对象编程的三大法宝:封装、继承与多态
    本文介绍了Java面向对象编程中的三大核心概念:封装、继承和多态。
    662 15
    |
    Java 编译器
    封装,继承,多态【Java面向对象知识回顾①】
    本文回顾了Java面向对象编程的三大特性:封装、继承和多态。封装通过将数据和方法结合在类中并隐藏实现细节来保护对象状态,继承允许新类扩展现有类的功能,而多态则允许对象在不同情况下表现出不同的行为,这些特性共同提高了代码的复用性、扩展性和灵活性。
    封装,继承,多态【Java面向对象知识回顾①】
    |
    Java 编译器
    Java——类与对象(继承和多态)
    本文介绍了面向对象编程中的继承概念,包括如何避免重复代码、构造方法的调用规则、成员变量的访问以及权限修饰符的使用。文中详细解释了继承与组合的区别,并探讨了多态的概念,包括向上转型、向下转型和方法的重写。此外,还讨论了静态绑定和动态绑定的区别,以及多态带来的优势和弊端。
    384 7
    Java——类与对象(继承和多态)
    |
    存储 Java 测试技术
    Java零基础-多态详解
    【10月更文挑战第10天】Java零基础教学篇,手把手实践教学!
    247 4
    |
    Java 编译器 程序员
    Java多态背后的秘密:动态绑定如何工作?
    本文介绍了Java中多态的实现原理,通过动态绑定和虚拟方法表,使得父类引用可以调用子类的方法,增强了代码的灵活性和可维护性。文中通过具体示例详细解析了多态的工作机制。
    383 4