【大话设计模式】方法重写和方法重载的区别

简介: 【大话设计模式】方法重写和方法重载的区别

面向对象基础中我们提到了方法重载,那么我们必然也听到过方法重写,那你对这两个方法知道多少呢?方法重写和方法重载的区别又是什么呢?下面让我们来分析一下。

方法重写(override)

概念

重写是子类对父类的允许访问的方法的实现过程进行重新编写,返回值和形参都不能改变,即外壳不变,核心重写

好处

子类可以根据需要,定义特定于自己的行为。也就是说子类能够根据需要实现父类的方法

注意

重写方法不能抛出新的检查异常或者比被重写方法申明更加宽泛的异常

例如:父类的一个方法申明了一个检查异常IOExecption,但是在重写这个方法的时候不能抛出Exception异常,因为Exception是IOExecption的父类,只能抛出IOException的子类异常

重写规则

  • 参数列表必须完全与被重写方法的相同
  • 返回类型必须完全与被重写方法的返回类型相同
  • 访问权限不能比父类中被重写的方法的访问权限更低。如:如果父类的一个方法被声明为public,那么在子类中重写该方法就不能声明为protected
  • 父类的成员方法只能被它的子类重写
  • 声明为static的方法不能被重写,但是能够被再次声明
  • 子类和父类在同一个包中,那么子类可以重写父类所有方法,除了声明为private和final的方法
  • 子类和父类不在同一个包中,那么子类只能够重写父类的声明为public和protected的非final方法
  • 构造方法不能被重写
  • 如果不能继承一个方法,则不能重写这个方法

举例

1. class Animal
2.     {
3. protected  string name = "";
4. public Animal (string name)
5.         {
6. this.name = name;
7.         }
8. protected int shoutNum = 3;
9. public virtual  string Shout()
10.         {
11. string result = "";
12. for (int i = 0; i < shoutNum ; i++)
13.             {
14.                 result += "啊";
15.             }
16. return "我的名字叫" + name + " ";
17.         }
18.     }
19. class Cat : Animal
20.     {        
21. public Cat(string name) : base(name) { }
22. 
23. public override string Shout()
24.         {
25. return "我的名字叫" + name + " ";
26.         }
27.     }

方法重载

概念

重载是在一个类里面,方法名字相同,而参数不同,返回类型可以相同也可以不同

好处

方法重载可以在不改变原方法的基础上,新增功能

注意

并不是只有构造方法可以重载,普通方法也可以重载

两个方法必须要方法相同,但参数类型或个数必须要有所不同

重载规则

  • 被重载的方法必须改变参数列表(参数个数或类型或顺序不一样)
  • 被重载的方法可以改变返回类型
  • 被重载的方法可以改变访问修饰符
  • 方法能够在同一类中或者在一个子类中被重载

举例

1. class Cat
2.     {
3. private string name = "";
4. public Cat(string name)
5.         {
6. this.name = name;
7.         }
8. public Cat() //将构造方法重载
9.         {
10. this.name = "无名";
11.         }
12. public string Shout()
13.         {
14. return "我的名字叫" + name + "喵";
15.         }
16.     }

重写与重载直接的区别

总结

方法重载和方法重写是多态性的不同表现,重写是父类与子类之间多态性的一种表现,重载可以理解成多态的具体表现形式。

1、方法重载是一个类中定义了多个方法名相同,而它们的参数的数量不同或数量相同而类型和次序不同,则称为方法的重载

2、方法重写是在子类存在方法与父类的方法的名字相同,而且参数的个数与类型一样,返回值也一样的方法,称为方法的重写

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

图解


相关文章
|
7月前
|
设计模式 存储 前端开发
MVVM、MVC、MVP三种常见软件架构设计模式的区别
MVC、MVP 和 MVVM 是三种常见的软件架构设计模式,主要通过分离关注点的方式来组织代码结构,优化开发效率。
154 12
|
5月前
|
设计模式 测试技术
依赖注入与工厂设计模式的区别
【8月更文挑战第22天】
95 0
|
8月前
|
设计模式 算法
设计模式思考,简单工厂模式和策略模式的区别?
设计模式思考,简单工厂模式和策略模式的区别?
|
8月前
|
设计模式 API
【设计模式】适配器和桥接器模式有什么区别
【设计模式】适配器和桥接器模式有什么区别
189 1
|
8月前
|
设计模式 Java 数据库连接
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
设计模式中的工厂模式(Factory Design pattern)是一个比较常用的创建型设计模式,其中可以细分为三种:简单工厂(Simple Factory)、工厂方法(Factory Method)和抽象工厂(Abstract Factory)。那么三者有什么区别呢?
172 1
Java设计模式--简单工厂、工厂方法和抽象工厂之间的区别
|
8月前
|
设计模式 缓存 安全
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
105 1
|
8月前
|
设计模式
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
装饰者设计模式(二)番外篇 装饰者设计模式和静态代理设计模式区别
|
设计模式 uml
设计模式中工厂方法与抽象工厂之间的区别联系
设计模式中工厂方法与抽象工厂之间的区别联系
89 0
|
设计模式 算法 API
常用设计模式的功能、关联和区别
常用设计模式的功能、关联和区别
110 0
|
设计模式
【重温设计模式】——从工厂方法模式看抽象类和接口的区别
【重温设计模式】——从工厂方法模式看抽象类和接口的区别
135 0

热门文章

最新文章

  • 1
    设计模式转型:从传统同步到Python协程异步编程的实践与思考
    64
  • 2
    C++一分钟之-设计模式:工厂模式与抽象工厂
    54
  • 3
    《手把手教你》系列基础篇(九十四)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-下篇(详解教程)
    61
  • 4
    C++一分钟之-C++中的设计模式:单例模式
    79
  • 5
    《手把手教你》系列基础篇(九十三)-java+ selenium自动化测试-框架设计基础-POM设计模式实现-上篇(详解教程)
    47
  • 6
    《手把手教你》系列基础篇(九十二)-java+ selenium自动化测试-框架设计基础-POM设计模式简介(详解教程)
    81
  • 7
    Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用
    70
  • 8
    Java面试题:设计模式在并发编程中的创新应用,Java内存管理与多线程工具类的综合应用,Java并发工具包与并发框架的创新应用
    54
  • 9
    Java面试题:如何使用设计模式优化多线程环境下的资源管理?Java内存模型与并发工具类的协同工作,描述ForkJoinPool的工作机制,并解释其在并行计算中的优势。如何根据任务特性调整线程池参数
    63
  • 10
    Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
    137