• 关于方法


    ====上一章《c#面向对象

    1、方法的重载:是让类以统一的方式处理不同类型数据的一种手段。(构造方法也可以重载)

      【实现】:在类中创建多个名字相同参数和实现不同的方法。

      【调用】:方法的调用通常通过方法名来实现,由于调用重载方法时方法名相同,此时的调用主要取决于方法参数

      【条件】:⑴、在同一个类中;

           ⑵、具有相同的方法名;

           ⑶、具有不同的参数。

      【举例】:class Computer

           {

              public  static int Add(int num1,int num2)  //方法1

              {

                return num1+num2;

              }

              public  static double Add(double num1,double num2)  //方法2

              {

                return num1+num2;

              }

              public  static int Add(int num1,int num2,int num3)  //方法3

              {

                return num1+num2+num3;

              }

           }

           public static void Main (String [] args)

           {

             Console.WriteLine(Computer.App(1,2));     //调用方法1

             Console.WriteLine(Computer.App(1.0,2.0)); //调用方法2

             Console.WriteLine(Computer.App(1,2,3));    //调用方法3

           }

    2、多态:多个子类对同一个方法的不同表现

          (例:动物类里的叫声,狗继承后是“汪汪”,猫继承后是“喵喵”)

      我们都知道:子类继承父类时,会获得父类的方法、字段、属性。

      那么要更改父类的数据和行为需要怎么做呢?

        ⑴、使用新的子类成员替换父类的成员(方法隐藏

        ⑵、重写虚拟的父类成员(方法重写

      2.1、方法重写:为了子类能够重写其父类方法,父类必须声明该成员为虚拟,通过virtual关键字实现子类通过使用Override关键字重写父类实现

        【举例】:public class Animal

             {

                ……

                public vritual void Bark()     //虚拟方法

                {

                  Console.WriteLine(“呜呜!”);

                }

             }

             public class Cat:Animal

             {

                ……

                public override void Bark()   //重写方法

                {

                  Console.WriteLine(“喵喵!”);

                }

             }

             class Program

             {

                static void Main(string [] args)

                {

                  Cat cat=new Cat("Jerry",2);

                  cat.Bark();//调用cat类的Bark方法

                  Animal animal=new Animal("Tom",1);

                  animal.Bark();//调用Animal类的Bark方法

                 Animal animalJack=new Cat("Tack",1);

                  animalJack.Bark();//调用Cat类的Bark方法

                }

             }

          【结果】:Hello  Animal!

                Hello  Cat!

                喵喵!

                Hello Animal!

                呜呜!

                Hello  Animal!

                Hello  Cat!

                喵喵!

      【注意】:1、重写方法与被重写方法的访问修饰符返回值类型方法名称参数必须一致

           2、调用重写方法时,调用那个方法取决于其具体的使用对象,即父类与子类分别调用各自的方法。

      2.2、方法隐藏:使用new关键字可以实现新的子类成员替换原有的父类成员。(在隐藏方法中,调用那个方法取决于被引用的对象

            (如果父类中已经定义了一个方法,则可以在子类中使用new关键字隐藏父类的实现,从而重新定义。)

       【举例】:public class Animal

             {

                ……

                public void Bark()     

                {

                  Console.WriteLine(“呜呜!”);

                }

             }

             public class Cat:Animal

             {

                ……

                public new void Bark()   //隐藏父类的Bark方法

                {

                  Console.WriteLine(“喵喵!”);

                }

             }

             class Program

             {

                static void Main(string [] args)

                {

                  Cat cat=new Cat("Jerry",2);

                  cat.Bark();//调用cat类的Bark方法

                  Animal animal=new Animal("Tom",1);

                  animal.Bark();//调用Animal类的Bark方法

                 Animal animalJack=new Cat("Tack",1);

                  animalJack.Bark();//调用Animal类的Bark方法

                }

             }

          【结果】:Hello  Animal!

                Hello  Cat!

                喵喵!

                Hello Animal!

                呜呜!

                Hello  Animal!

                Hello  Cat!

                呜呜!

    3、sealed关键字:可以修饰类和方法。

      ⑴、密封类:通过sealed修饰的类。(密封类无法被继承

        【语法】:sealed  class  ClassName

             {

                ……

             }

      ⑵、密封方法sealed修饰方法时只能和override一起使用,用于防止重写方法再次被重写。

          【举例】:

             public class Animal

             {

                ……

                public virtual void Bark()     

                {

                  Console.WriteLine(“呜呜!”);

                }

             }

             public class Cat:Animal

             {

                ……

                public sealed override void Bark()   //密封方法,无法再被重写

                {

                  Console.WriteLine(“喵喵!”);

                }

             }

  • 相关阅读:
    vue-router 路由拦截 beforeEach 添加静态路由 与 动态添加路由
    elementUI el-upload 根据上传的图片高度,进行自适应宽度
    vue 中 字符串分两行显示
    MySQL中的<=>
    Spring mvc再启动时候会打印项里面的所有路径
    一次解决前后台交互问题
    数据库表分区,分表
    支付宝接口
    打印js中一个对象的所有属性的值
    var
  • 原文地址:https://www.cnblogs.com/pengyouqiang88/p/5025748.html
Copyright © 2020-2023  润新知