Java 面向对象(OOP)中的方法重载(Overload)与方法重写(Override),理解多态和类设计的重要基础

[OOP]C++中重载(Overload)、重写(覆盖)(Override)和隐藏的区别 C++中重载、重写和隐藏的区别如下:重载发生在同一类中,函数同名但参数不同;重写(覆盖)是派生类重新定义基类虚函数,要求函数签名完全一致;隐藏则是派生类函数屏蔽基类同名函数,不论参数是否相同。重载关注参数差异,重写需要virtual修饰且跨类,隐藏只需同名即可屏蔽基类函数。示例显示派生类fun(int)隐藏了基类fun(double,int),通过基类指针仍可访问被隐藏函数。 阅读详情

1. 方法重载(Overloading)

方法重载是 在同一个类中,方法名相同,但参数列表不同(类型、个数或顺序不同)。

1.1 特点

  1. 方法名相同

  2. 参数列表不同(类型、数量、顺序)

  3. 返回类型可以相同或不同(与重载无关)

  4. 修饰符可以不同

1.2 示例

public class Calculator {

    // 两个整数相加
    public int add(int a, int b) {
        return a + b;
    }

    // 三个整数相加
    public int add(int a, int b, int c) {
        return a + b + c;
    }

    // 两个小数相加
    public double add(double a, double b) {
        return a + b;
    }
}

public class Main {
    public static void main(String[] args) {
        Calculator calc = new Calculator();
        System.out.println(calc.add(1, 2));       // 3
        System.out.println(calc.add(1, 2, 3));    // 6
        System.out.println(calc.add(1.5, 2.5));   // 4.0
    }
}

✅ 总结:

  • 重载发生在编译时,根据参数列表决定调用哪一个方法

  • 与继承无关(在同一个类中即可)


2. 方法重写(Overriding)

方法重写是 子类重新定义父类中已经存在的方法,用于实现多态。

2.1 特点

  1. 方法名相同

  2. 参数列表必须相同

  3. 返回类型相同或协变类型(Java 5+ 支持协变返回类型)

  4. 子类方法访问权限 ≥ 父类方法访问权限

  5. 子类方法不能缩小父类方法的权限(例如父类 public,子类不能用 private)

  6. static 方法不能被重写(可以隐藏)

  7. 父类方法可以加 final,子类不能重写

2.2 示例

class Animal {
    public void makeSound() {
        System.out.println("动物叫");
    }
}

class Dog extends Animal {
    @Override
    public void makeSound() {
        System.out.println("汪汪汪");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal a = new Dog();
        a.makeSound(); // 输出:汪汪汪(多态)
    }
}

✅ 总结:

  • 重写发生在运行时,表现为多态

  • 必须在父类和子类中方法签名完全一致

  • 可以使用 @Override 注解,帮助编译器检查


3. 方法重载 vs 方法重写对比

特性方法重载(Overload)方法重写(Override)
所在位置同一类父类与子类
方法名相同相同
参数列表不同必须相同
返回类型可以不同相同或协变
发生时间编译时运行时
多态否是
static 方法可以重载不能重写(隐藏)

4. 小结与示例

class Calculator {
    // 重载示例
    public int add(int a, int b) { return a + b; }
    public double add(double a, double b) { return a + b; }
}

class Animal {
    public void eat() { System.out.println("动物吃东西"); }
}

class Dog extends Animal {
    @Override
    public void eat() { System.out.println("狗吃骨头"); }
}

public class Main {
    public static void main(String[] args) {
        // 方法重载
        Calculator calc = new Calculator();
        System.out.println(calc.add(1, 2)); // 3
        System.out.println(calc.add(1.5, 2.5)); // 4

        // 方法重写
        Animal a = new Dog();
        a.eat(); // 多态,输出:狗吃骨头
    }
}

方法的重写(Override)与重载(Overload):深入解析Java多态性 Java中的方法重写(Override)与方法重载(Overload)是OOP多态性的两种实现方式。重写发生在继承关系中,子类重新定义父类方法,要求签名严格一致,实现运行时多态;重载允许同名方法参数不同,提供统一接口,属于编译时多态。关键区别在于:重写关注行为替换(子类个性化),重载侧重接口扩展(参数多样化)。理解二者的绑定时机、规则差异及适用场景,对设计灵活可扩展的Java程序至关重要。 阅读详情

相关推荐

MedicalNet实战:3D医疗影像分割从零到部署(PyTorch+ResNet50)

本文详细介绍了基于PyTorch和MedicalNet预训练模型进行3D医疗影像分割的完整实战流程。通过加载ResNet50预训练权重进行迁移学习,大幅降低了对标注数据量的需求,并提升了模型性能。文章涵盖了从数据准备、模型微调、训练优化到最终部署的每一步,为医疗AI开发者提供了从零到部署的清晰指南。

weixin_29062671的博客 588

方法覆盖(Override)与方法重载(Overload)详解

子类重新定义父类中已存在的同名方法,以改变或扩展其行为。核心目的:实现运行时多态(动态绑定)。关键规则:方法名、参数列表、返回类型必须与父类方法完全相同。访问权限不能比父类方法更严格(如父类为,子类不能为)。不能覆盖、或方法。java复制下载 class Animal { public void makeSound() { System.out.println("Animal sound"); } } class Cat extends Animal {

2301_81882590的博客 921

从零到一:银河麒麟OS下C#跨平台开发的避坑指南

本文详细介绍了在银河麒麟OS下进行C#跨平台开发的完整流程,从开发环境搭建到避坑指南。针对国产操作系统特性,提供了.NET Core安装、开发工具链配置、桌面应用开发及部署优化的实战经验,特别关注ARM架构适配和性能调优,帮助开发者高效应对国产化开发挑战。

weixin_29221753的博客 863

深入理解C++的重载、继承、多态三大特性

继承允许一个类(派生类)从另一个类(基类)继承属性和行为,从而实现代码复用。C++ 支持单继承和多继承。多态性指的是同一接口可以有多种实现方式。C++ 主要通过虚函数(virtual function)实现动态多态性,即运行时多态。重载:用于定义多个同名函数或运算符,根据参数的不同选择合适的版本。继承:用于实现代码复用,注意访问控制和构造函数的调用顺序。多态:通过虚函数实现动态绑定,增强代码的灵活性和扩展性。

evesmith520的博客 1452

LVGL8.x 实体按键与Keypad驱动的无缝对接实战

本文详细解析了LVGL8.x中实体按键与Keypad驱动的两种对接方案:坐标映射的Button方式与事件驱动的Keypad方式。重点阐述了如何模块化裁剪lv_port_indev.c模板文件,并深入讲解了Keypad驱动与Group焦点管理系统的核心协作机制,为无触摸屏的嵌入式设备提供流畅的UI交互解决方案。

weixin_29164497的博客 446

CCS20实战入门:第一个工程搭建示例

通过实际操作演示如何在ccs20中创建并配置首个开发项目,涵盖环境设置与基础调试步骤,帮助新手快速上手ccs20集成开发环境,提升嵌入式开发效率。

weixin_31185473的博客 884

45_面向对象_18_多态_基本概念_强制转型问题_instanceof运算符

面向对象三大特征: 继承、封装、多态 多态(polymorphism) 多态性是OOP中的一个重要特性,主要是用来实现动态联编的,换句话说,就是程序的最终状态只有在执行过程中才被决定而非在编译期间就决定了。这对于大型系统来说能提高系统的灵活性和扩展性。 多态可以让我们不用关心某个对象到底是什么具体类型,就可以使用该对象的某些方法,从而实现更加灵活的编程,提高系统的可扩展性。

werdzs的博客 516

数字IC后端实现之快速获取innovus中drv violation的所有net list

数字IC后端设计实现之快速获取innovus中drv violation的所有net list

weixin_37584728的博客 3350

第76讲 Python 继承详解

继承(inheritance)是面向对象软件技术当中的一个概念。这种技术使得重复使用以前的代码非常容易,能够大大缩短开发周期,降低开发成本。 继承机制就是指子类继承父类的特征和行为,使得子类对象(实例)具有父类的属性和方法,或子类从父类继承方法,使得子类具有父类相同的行为。 在 Python 中,实现继承的类称为子类或派生类,被继承的类称为父类、基类或超类。

码农阿杰的博客 733

【人工智能AI】是什么?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学。(百度百科)人工智能的基本原理:机器从「特定的」大量数据中总结规律,形成某些「特定的知识」,然后将这种「知识」应用到现实场景中去解决实际问题。在这个基本原理的基础上,有3个特征:1、人工智能本质上是一种工具2、人工智能技能只能解决特定的问题,而不是什么都能做3、人工智能属于归纳逻辑,可以告诉你是什么,但是不能告诉你为什么。

KJCZ.AK的博客 2万+

GStreamer中h264parse元素

h264parse是 GStreamer 中处理 H.264 视频流的关键元素,主要负责解析和准备 H.264 流以便后续处理。

深之JohnChen的专栏 1022

HIT SC OOP一节中对重写与重载的理解

重写是指继承父类的子类对于父类中已有的方法进行重新编写,对父类继承的方法进行覆盖,重写完毕后只有一个方法在子类中存在。 重载是指子类继承父类的方法与子类自身定义de'fang

m0_49536031的博客 1224

CUDA&PCL 点云体素下采样

CUDA&PCL 点云体素下采样

dayuhaitang1的博客 1268

重载(Overload)与重写(Override)的区别

重载:

weixin_52754604的博客 2079

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java之重载和重写

重载(Overload)与重写(Overwrite/Override)都是针对方法来说的,那这两种机制有什么好处呢? 重载——同样的一个方法能够根据输入数据的不同,做出不同的处理。【有不同的参数列表(静态多态性)】 重写——当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,就需要重写父类的方法。即在子类中重写该方法【相同参数,不同实现(动态多态性)】 用个toy program应该更好理解一些,看完程序之后建议读者应该先想一想输出结果是什么。

搬砖工 2702

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java方法重写(Override)详解:从语法到多态实战

在面向对象编程中,方法重写是实现多态性的核心技术,它允许子类为继承的方法提供特定实现。其原理基于动态绑定机制,在运行时根据对象实际类型决定调用哪个方法,这大大提升了代码的灵活性和可扩展性。在工程实践中,重写广泛应用于框架扩展、接口实现和自定义业务逻辑等场景。正确使用@Override注解能有效避免常见错误,而遵循里氏替换原则则是保证重写行为正确的关键。本文通过Java示例深入解析了重写的语法规则、与重载的核心区别,并提供了完整的图形系统实战案例和最佳实践指南。

weixin_33827731的博客 486

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

【Java教程】Day4-07 面向对象编程(OOP):方法覆写(Override)与多态的应用

在面向对象编程中,继承与多态是两大核心概念。在Java中,方法的覆写(Override)和方法的重载(Overload)经常被初学者混淆。本文将深入讲解方法覆写的基本概念及其与多态的关系,结合具体的代码示例,帮助你更好地理解和掌握这一重要技术。

max202011161630的博客 998

方法的重写与重载

方法的重写与重载

m0_64562382的博客 522

对于重写和重载的理解

对于重写和重载的理解 重写(Override) 从字面上看,重写就是 重新写一遍的意思。其实就是在子类中把父类本身有的方法重新写一遍。子类继承了父类原有的方法,但有时子类并不想原封不动的继承父类中的某个方法,所以在方法名,参数列表,返回类型(除过子类中方法的返回值是父类中方法返回值的子类时)都相同的情况下, 对方法体进行修改或重写,这就是重写。但要注意子类函数的访问修饰权限不能少于父类的。 pub...

qq_37867421的博客 495

Java入门教程||Java 继承||Java 重写(Override)与重载(Overload)

方法的重写 (Overriding) 和重载 (Overloading) 是 java 多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。(1)方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载 (Overloading)。(2)方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,就称为重写 (Overriding)。

爱编程的鱼的博客 1953

java中覆盖和重载的区别

  1. 首先搞明白覆盖是什么?   ·        举个栗子 public class Main { public static void main(String[] args) { new Father().print(); new Son().print(); } } class Father{ public void print(){ System.ou...

zhen921的博客 2万+

JAVA 方法的重写与重载

多态”的技术之一,所谓“重载”,即是方法名称相同,但却可在不同的场合做不同的事。当一个子类继承一父类,而子类中的方法与父类中的方法的名称、参数个数和类型都完全一致时,就称子类中的这个方法重写了父类中的方法。方法重写是在子类存在方法与父类的方法的名字相同而且参数的个数与类型一样,返回值也一样的方法,就称为方法的重写;方法重载是一个类中定义了多个方法名相同,而他们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载;重写的方法不能比被重写的方法产生更多的异常(关于异常,在后面会介绍)。

M6503493788的博客 539

Java基础知识杂记(一)-修饰符、jdk关系、多态重写

闲来无事,聊将往日做的些许零散笔记凑合整理一下。 访问控制权限排序——隐私程度,表示修饰符的权限: private只能在类内部访问; default可以在内部访问,可被同一个包内的类访问;(子类和父类在同一个包可以访问子类,不在同一个包则不能访问) protected子类的子类,可以访问; public只要在系统类都可以访问; JAVA SE 封装,继承,多态——>基本的...

turbodark的博客 269

Java OOP 高频面试五连击:封装继承多态、this() vs super()、Overload vs Override、构造器与 String 终局解析

从字面上理解,就是多种形态,多种状态的含义,在这里,指的是一个对象具有多种形态的特点。从String 的源代码中可以看到String类是被 final 修饰的,被final 修饰的类禁止被继承,因此任何类都无法继承 String。:是从已有的类中派生出新的类,新的类能吸收已有类的数据属性和行为,并能扩展新的能力。集中在一处,确保父类资源先准备就绪,避免子类重复设置,从而保障继承体系的完整性与可维护性。注意:子类的类名不可能和父类的类名相同,所以不可能满足重写的条件②③。,是子类对父类方法的重新实现。

2201_75941872的博客 475

JavaSE(15)Java重写和重载

Java重写(Override)与重载(Overload) 重写(Override) 概述: 重写是子类对父类的允许访问的方法的实现过程进行重新编写。 返回值和形参都不能改变。 即外壳不变,核心重写。 重写的好处: 子类可以根据需求,定义特定于自己的行为。 方法重写的规则: 参数列表与被重写的方法的参数列表必须完全相同。 返回类型与被重写方法的返回类型可以不同,但是必须是父类返回值的派生类。 访问权限不能比父类中被重写的方法的访问权限低,权限可以扩大但是不能缩小。 public > pro

Radishtoo的博客 324
上一篇: vue 子孙组件传参数,通知更新
下一篇: Java 常用 API,涵盖 字符串、数学、数组、集合工具类以及 包装类和自动装箱拆箱,这是 Java 基础进阶必备内容
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值