• 虚方法和多态


     1  class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             //Dog dog = new Dog();
     6             Pet dog = new Dog("DD");//创建指向派生类Dog的基类Pet的实例
     7             //dog.Name = "DD";
     8             dog.Speak();//此处是调用Pet类的虚方法Speak(),根据dog所指向的派生类Dog而调用Dog里的同名重写方法Speak()---即多态
     9             //Cat cat = new Cat();
    10             Pet cat = new Cat("CC");//创建指向派生类Cat的基类Pet的实例
    11             //cat.Name = "CC";
    12             cat.Speak();//此处是调用Pet类的虚方法Speak(),根据cat所指向的派生类Cat而调用Cat里的同名重写方法Speak()---即多态
    13           
    14 
    15         }
    16 
    17     }
    18     public class Pet
    19     {
    20         public string Name;
    21         public void PrintName()
    22         {
    23             Console.WriteLine("Print"+Name);
    24         }
    25         
    26         virtual public void Speak()//声明了virtual的方法就是虚方法,可在派生类中override重写
    27         {
    28             Console.WriteLine("I'm "+Name);  
    29         }
    30     }
    31     public class Dog : Pet
    32     {
    33         public Dog(string name)//构造函数
    34         {
    35             Name = name;
    36         }
    37         new public void PrintName()
    38         {
    39             Console.WriteLine("子打印"+Name);
    40         }
    41         override public void Speak()//重写基类Pet的虚方法
    42         {
    43             Console.WriteLine("子说" + Name);
    44         }
    45     }
    46     public class Cat : Pet
    47     {
    48         public Cat(string name)//构造函数
    49         {
    50             Name = name;
    51         }
    52         new public void PrintName()
    53         {
    54             Console.WriteLine("子打印" + Name);
    55         }
    56         override public void Speak()//重写基类Pet的虚方法
    57         {
    58             Console.WriteLine("子说" + Name);
    59         }
    60     }

     以上是虚方法和多态。

    面向对象编程过程中尽量依赖抽象的类,而不要过分依赖具体类。

    基类的引用可以指向派生类。通过指向Dog类的Pet类的引用,仅能访问Dog中继承自Pet的部分,如下:

    class Program
        {
            static void Main(string[] args)
            {
                
                Pet dog = new Dog("DD");//创建指向派生类Dog的基类Pet的实例,前面的Pet的位置 决定了下面引用的方法取自哪个类。
                dog.PrintName();
                Pet cat = new Cat("CC");//创建指向派生类Cat的基类Pet的实例
                             
               cat.PrintName();//指向派生类Cat的对Pet的引用,访问的是Catl里继承自Pet的方法---基类的引用
    
            }
    
        }
        public class Pet
        {
            public string Name;
            public void PrintName()
            {
                Console.WriteLine("Print"+Name);
            }
                 
        }
        public class Dog : Pet
        {
            public Dog(string name)//构造函数
            {
                Name = name;
            }
            new public void PrintName()
            {
                Console.WriteLine("子打印"+Name);
            }
          
        }
        public class Cat : Pet
        {
            public Cat(string name)//构造函数
            {
                Name = name;
            }
            new public void PrintName()
            {
                Console.WriteLine("子打印" + Name);
            }
           
        }
    
    
    
  • 相关阅读:
    2022.44 AI在视觉领域进展
    2022.46 魔搭社区
    2022.38 AIOT产业结构
    2022.41 全真互联
    2022.39 AIOT和元宇宙
    2022.45 AIGC
    2022.42 全真互联技术
    2022.40 AIOT和双碳目标
    2022.43 全真互联应用
    2022.37 AIOT的应用场景分类
  • 原文地址:https://www.cnblogs.com/cicily/p/10911048.html
Copyright © 2020-2023  润新知