zoukankan      html  css  js  c++  java
  • 关于方法

    ====上一章《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(“喵喵!”);

                }

             }

  • 相关阅读:
    Linux学习--线程概念
    菱形继承
    C++类型萃取
    Linux学习--进程创建
    Linux学习--进程概念
    比较全面的gdb调试命令
    再度理解原码、反码、补码
    详谈C++虚函数表那回事(多重继承关系)
    【sparkStreaming】将DStream保存在MySQL
    【sparkStreaming】kafka作为数据源的生产和消费
  • 原文地址:https://www.cnblogs.com/pengyouqiang88/p/5025748.html
Copyright © 2011-2022 走看看