重载和重写

相信我们在学习C#视频的时候在看到多太那块就一定会遇到重写和重载这两个名词,看着楚老师在视频里面的演示,自己还真是没有明白他们两者到底有什么不一样的地方,后来自己又找了很多的资料,才慢慢的有了头绪。下面,让我们一块来看看吧。

 

 

首先我们来讲讲:重载(Overloading)

 

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

 

2 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数、类型或者顺序)必须不同,也就是说用同一个运算符完成不同的运算功能。这就是重载函数。重载函数常实现功能类似而所处理的数据类型不同的问题。

 

 

 

然后我们再来谈谈 重写(Overriding)

 

    1 父类与子类之间的多态性,对父类的函数进行重新定义。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。但有时子类并不想原封不动地继承父类的方法,而是想作一定的修改,这就需要采用方法的重写。也就是说重写主要是针对继承中出现的情景。因为,他只是在原有的方法上做一些修改,所以方法重写又称方法覆盖。

 

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

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

 

总结:

重载,简单说,就是函数或者方法有同样的名称,但是参数列表不相同的情形,这样的同名不同参数的函数或者方法之间,互相称之为重载函数或者方法。

 

 

重写:当一个子类继承一父类,而子类中的方法与父类中的方法的名称,参数个数、类型都完全一致时,就称子类中的这个方法重写了父类中的方法。


现阶段的我只是在理论上认识了两种的区别,今后更要在一次次的例子中去理解重写和重载,体会他们的魅力所在。

<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) | | **绑定时间** | 编译时(静态绑定) | 运行时(动态绑定) | | **异常处理** | 无限制 | 不能抛出新的或更广的检查异常 | | **目的** | 提供同名方法的不同实现 | 实现多态,覆盖父类行为 |
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值