• 重写(override)和重载(overload)的区别


    1).重写(override)

      override是重写(覆盖)了一个方法,以实现不同的功能,一般的用于子类在继承父类时,重写(重新实现)父类的方法,实现不同的需求。

    重写(覆盖)的规则:

     1.重写的方法必须是virtual,abstract或者是override(virtual修饰符不能与static,abstract,private或override修饰符一起使用,静态属性上使用virtual修饰符会报错)。

     2.重写方法的参数列表必须完全与被重写的方法相同,否则不能称为重写而是重载。

     3.重写的方法的访问修饰符一定要大于被重写方法的访问修饰符(public>protected>default>private)。

     4.重写的方法的返回值必须和被重写的方法返回值一致。

     5.重写的方法所抛出的异常必须和被重写的方法所抛出的异常一致,或是其子类(eg:父类的一个方法申明了一个检查异常IOException,在重写这个方法就不能抛出Exception,只能抛出IOException的子类异常,可以抛出非检查异常)。

     6.被重写的方法不能为private,否则在其子类中只是定义了一个新的方法,并没有对其重写。

     7.静态方法不能被重写为非静态方法(会编译出错)。

     8.子类不能重写父类中的final修饰的方法。

     1 /// <summary>
     2         /// 定能基类动物类
     3         /// </summary>
     4         /// <returns></returns>
     5         public class Animal
     6         {
     7             public virtual void Eatting()
     8             {
     9                 Console.WriteLine("用嘴吃饭!");
    10             }
    11         }
    12 
    13         #region 重写(覆盖原则)
    14 
    15         public class Pople : Animal
    16         {
    17             public override void Eatting() //基类必须是virtual方法
    18             {
    19                 Console.WriteLine("人用筷子吃饭!");
    20             }
    21         }
    22 
    23         public class Monkey : Animal
    24         {
    25             public new void Eatting()
    26             {
    27                 Console.WriteLine("猴子直接用手吃饭!");
    28             }
    29         }
    30 
    31 
    32         #endregion
    33 
    34         /// <summary>
    35         /// 方法重载和冲写的区别
    36         /// </summary>
    37         /// <param name="args"></param>
    38         public static void Main(string[] args)
    39         {
    40             var pople = new Pople();
    41             (pople as Animal).Eatting(); //打印【人用筷子吃饭!】
    42             pople.Eatting();//打印【人用筷子吃饭!】
    43 
    44             var monKey = new Monkey();
    45             (monKey as Animal).Eatting();//打印【用嘴吃饭!】
    46             monKey.Eatting();//打印【猴子直接用手吃饭!】
    47 
    48             Console.ReadKey();
    49         }
    演示代码demo

     2).重载(overload)

      overload是重载,一般是用于在一个类实现若干重载的方法,这些方法的名称相同参数不同。

     重载的规则:

     1.在使用重载时只能通过相同的方法名,不同的参数形式类实现。不同的参数类型可以是不同的参数类型,不同的参数个数,不同的参数顺序(参数类型必须不一样)。

     2.不能通过访问权限,返回类型,抛出的异常进行重载。

     3.方法的异步类型和数目不会对重载造成影响。

     1 using System;
     2 using System.Threading.Tasks;
     3 
     4 namespace OverReadOverLoadDifference
     5 {
     6     class Program
     7     {
     8         #region 方法重载
     9 
    10         /// <summary>
    11         /// 定义计算类
    12         /// </summary>
    13         public class Calculation
    14         {
    15             public int sunMation(int a)
    16             {
    17                 return a;
    18             }
    19 
    20             public int sunMation(int a, int b)
    21             {
    22                 return a + b;
    23             }
    24         }
    25 
    26         #endregion
    27 
    28         /// <summary>
    29         /// 方法重载
    30         /// </summary>
    31         /// <param name="args"></param>
    32         public static void Main(string[] args)
    33         {
    34             #region 重载
    35             var calculation = new Calculation();
    36             Console.WriteLine(calculation.sunMation(1));
    37             Console.WriteLine(calculation.sunMation(2, 3)); 
    38             #endregion
    39 
    40             Console.ReadKey();
    41         }
    42     }
    43 }
    演示代码demo
  • 相关阅读:
    java 单链表 练习
    大问题-简明哲学导论
    git的常见错误
    python在Ubuntu添加模块搜索路径
    前端
    TCP/IP图解
    调试
    Design program
    算法
    面向对象-聚集,程序比较发现
  • 原文地址:https://www.cnblogs.com/Jinfeng1213/p/9777081.html
Copyright © 2020-2023  润新知