重载和重写的总结

本文详细解释了Java中的方法重写与重载的概念、区别、使用场景及其实现方式,包括访问修饰权限、参数表和返回类型等方面,并深入探讨了动态绑定的原理。
重写是子类的方法覆盖父类的方法,要求方法名和参数都相同

重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数.

java中重载与重写的区别:

重写(Overriding)

    (1) 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。在Java中,子类可继承父类中的方法,而不需要重新编写相同的方法。

但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。

方法重写又称方法覆盖。

    (2)若子类中的方法与父类中的某一方法具有相同的方法名、返回类型和参数表,则新方法将覆盖原有的方法。

如需父类中原有的方法,可使用super关键字,该关键字引用了当前类的父类。

    (3)子类函数的访问修饰权限不能少于父类的;

重载(Overloading)

    (1) 方法重载是让类以统一的方式处理不同类型数据的一种手段。多个同名函数同时存在,具有不同的参数个数/类型。

重载Overloading是一个类中多态性的一种表现。

    (2) Java的方法重载,就是在类中可以创建多个方法,它们具有相同的名字,但具有不同的参数和不同的定义。

调用方法时通过传递给它们的不同参数个数和参数类型来决定具体使用哪个方法, 这就是多态性。

    (3) 重载的时候,方法名要一样,但是参数类型和个数不一样,返回值类型可以相同也可以不相同。无法以返回型别作为重载函数的区分标准。


    概念:即调用对象方法的机制。

    动态绑定的实质:

    1、编译器检查对象声明的类型和方法名,从而获取所有候选方法。
    2、重载决策:编译器检查方法调用的参数类型。
    3、若方法类型为priavte static final ,java采用静态编译,编译器会准确知道该调用哪个方法。
    4、当程序运行并且使用动态绑定来调用一个方法时,那么虚拟机必须调用对象的实际类型相匹配的方法版本。
学习总结:

    多态性是面向对象编程的一种特性,和方法无关,简单说,就是同样的一个方法能够根据输入数据的不同,做出不同的处理,即方法的重载——有不同的参数列表(静态多态性)而当子类继承自父类的相同方法,输入数据一样,但要做出有别于父类的响应时,你就要覆盖父类方法,即在子类中重写该方法——相同参
数,不同实现(动态多态性)
<think>首先,用户的问题是:“方法重载重写区别”,这是关于Java编程中方法重载(Overloading)方法重写(Overriding)的区别。 我需要用中文回答问题,因为用户指定了“请使用中文回答问题”。 我的回答结构: 1. 解释方法重载(Overloading)。 2. 解释方法重写(Overriding)。 3. 比较两者的区别。 4. 最后,必须根据问题回答提出3-5个相关问题。 5. 相关问题必须以“§§相关问题§§”开头,并且输出在末尾。 6. 不能换行分散,所以相关问题应该在一行内列出,但示例中是数字列表,所以我可以用数字格式如“1. ··· 2. ···”等。 确保回答完整。 关键点: - **方法重载(Overloading)**:在同一个类中,方法名相同,但参数列表不同(参数类型、个数或顺序不同)。返回类型可以不同,但不能仅靠返回类型区分重载重载发生在编译时。 - **方法重写(Overriding)**:在子类中重新定义父类的方法。方法名、参数列表返回类型必须相同。重写用于实现多态,发生在运行时。 区别总结: - 作用域:重载在同一个类;重写在子类。 - 参数:重载参数不同;重写参数相同。 - 返回类型:重载可以不同;重写必须相同(或协变返回)。 - 访问修饰符:重载无限制;重写不能更严格(如父类public,子类不能private)。 - 异常:重载无限制;重写不能抛出新的或更广的检查异常。 - 绑定:重载是编译时;重写是运行时。 现在,构建回答: - 先简要介绍两者。 - 然后详细解释区别。 - 最后输出相关问题。 相关问题:基于问题回答,提出3-5个相关问题。例如: 1. 方法重载能改变返回类型吗? 2. 方法重写时访问修饰符有什么限制? 3. 什么是协变返回类型在重写中的应用? 4. 重载重写如何影响多态性? 5. 在Java中,能重写静态方法吗? 确保相关问题数量在3-5个。 最后,输出格式: - 回答完问题后,直接输出“§§相关问题§§”,然后列出相关问题,用数字点格式。 完整回答结构: 1. 解释重载。 2. 解释重写。 3. 比较区别。 4. §§相关问题§§ 1. ... 2. ... 3. ...</think>在Java编程中,方法重载(Overloading)方法重写(Overriding)是面向对象编程的核心概念,它们都涉及方法的复用,但存在本质区别。以下是详细解释: ### 方法重载(Overloading) - **定义**:在同一个类中,定义多个同名方法,但参数列表不同(例如参数类型、个数或顺序不同)。返回类型可以相同或不同,但不能仅靠返回类型区分重载。 - **特点**: - 发生在编译时(静态绑定)。 - 用于提供方法的多版本实现,提高代码可读性。 - 访问修饰符无特殊限制。 - **示例**: ```java class Calculator { int add(int a, int b) { return a + b; } // 重载版本1 double add(double a, double b) { return a + b; } // 重载版本2,参数类型不同 } ``` ### 方法重写(Overriding) - **定义**:在子类中重新定义父类的方法。方法名、参数列表返回类型必须相同(或协变返回类型),用于覆盖父类行为。 - **特点**: - 发生在运行时(动态绑定),支持多态。 - 访问修饰符不能比父类更严格(如父类为public,子类不能为private)。 - 不能抛出新的检查异常(checked exception)或更广的异常。 - **示例**: ```java class Animal { void sound() { System.out.println("Animal sound"); } } class Dog extends Animal { @Override void sound() { System.out.println("Bark"); } // 重写父类方法 } ``` ### 主要区别 | 方面 | 方法重载 (Overloading) | 方法重写 (Overriding) | |--------------|------------------------------------------|------------------------------------------| | **作用域** | 同一个类中 | 子类继承父类 | | **参数列表** | 必须不同(类型、个数或顺序) | 必须相同 | | **返回类型** | 可以不同 | 必须相同(或协变返回,如子类返回更具体类型) | | **访问修饰符** | 无限制 | 不能比父类更严格(如不能从public改为private) | | **绑定时间** | 编译时(静态绑定) | 运行时(动态绑定) | | **异常处理** | 无限制 | 不能抛出新的或更广的检查异常 | | **目的** | 提供同名方法的不同实现 | 实现多态,覆盖父类行为 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值