0
点赞
收藏
分享

微信扫一扫

【大话设计模式】方法重写与方法重载:深入解析两者的区别与应用


目录

一、前言

二、方法重写(override)

1、概念

2、好处

3、注意

4、重写规则

5、举例

三、方法重载

1、概念

2、好处

3、注意

4、重载规则

5、举例

四、重写与重载直接的区别

五、图解

六、总结

一、前言

在面向对象编程中,方法重写(Override)和方法重载(Overload)是两个常见的概念,但它们在实际应用中往往容易引起混淆。本文将详细解析方法重写和方法重载的区别,帮助读者更好地理解和应用这两个概念。

二、方法重写(override)

1、概念

方法重写是指在子类中重新定义一个与父类中同名、参数列表相同的方法。重写的方法必须具有相同的方法名、返回类型和参数列表,但可以有不同的实现。在重写时,子类可以拓展或修改父类方法的行为,但不能改变方法的签名。

2、好处

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

3、注意

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

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

4、重写规则

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

5、举例

class Animal
    {
        protected  string name = "";
        public Animal (string name)
        {
            this.name = name;
        }
        protected int shoutNum = 3;
        public virtual  string Shout()
        {
            string result = "";
            for (int i = 0; i < shoutNum ; i++)
            {
                result += "啊";
            }
            return "我的名字叫" + name + " ";
        }
    }
    class Cat : Animal
    {        
        public Cat(string name) : base(name) { }

        public override string Shout()
        {
            return "我的名字叫" + name + " ";
        }
    }

三、方法重载

1、概念

方法重载是指在同一个类中,使用相同的方法名,但参数列表不同的多个方法。重载的方法可以具有不同的参数类型、个数或顺序。编译器根据传入的参数类型和数量来决定调用哪个重载的方法

2、好处

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

3、注意

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

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

4、重载规则

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

5、举例

class Cat
    {
        private string name = "";
        public Cat(string name)
        {
            this.name = name;
        }
        public Cat()	//将构造方法重载
        {
            this.name = "无名";
        }
        public string Shout()
        {
            return "我的名字叫" + name + "喵";
        }
    }

四、重写与重载直接的区别

【大话设计模式】方法重写与方法重载:深入解析两者的区别与应用_前端

五、图解

【大话设计模式】方法重写与方法重载:深入解析两者的区别与应用_java_02

【大话设计模式】方法重写与方法重载:深入解析两者的区别与应用_前端_03

六、总结

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

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

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

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

举报

相关推荐

0 条评论