VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > .net教程 >
  • ASP.net教程之虚方法和多态

 
 
 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);
        }
       
    }

相关教程