欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

虚方法和多态

程序员文章站 2022-03-28 16:26:55
以上是虚方法和多态。 面向对象编程过程中尽量依赖抽象的类,而不要过分依赖具体类。 基类的引用可以指向派生类。通过指向Dog类的Pet类的引用,仅能访问Dog中继承自Pet的部分,如下: ......
 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);
        }
       
    }