码迷,mamicode.com
首页 > 其他好文 > 详细

扯不清楚的virtual和abstract

时间:2017-12-05 00:58:29      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:school   控制   sof   microsoft   子类   work   idt   alt   write   

 

定义Person类:

1     class Person
2     {
3         public void Say()
4         {
5             Console.WriteLine("I am a person");
6         }
7     }

现在,我想定义一个Stu类, 并且继承Person类,并且我想让Stu类有属于自己的Say方法

1  class Stu:Person
2     {
3         public string school="Oxford";
4         public void Say()
5         {
6             Console.WriteLine("I am a student from " + school);
7         }
8     }

然后,在Main函数中,分别实例化Person类和Stu类

 1 class Program
 2     {
 3         static void Main(string[] args)
 4         {
 5             Person person = new Person();
 6             person.Say();
 7 
 8             Stu stu= new Stu();
 9             stu.Say();
10 
11             person=stu;
12             person.Say();
13         }
14     }

在控制台中,输入csc Program.cs编译,如下图

技术分享图片

(请选择你自己喜欢的编译器,并包含编译器的位置到path环境变量中,如path=%path%;C:\Windows\Microsoft.NET\Framework64\v2.0.50727)

编译后,如上图我们看到有个警告,意思是Stu类中的Say方法,隐藏了Person类中的Say方法,如果确实有需要,喊我们显示地使用new关键字去隐藏,做如下改动

1     class Stu:Person
2     {
3         public string school="Oxford";
4         public new void Say()
5         {
6             Console.WriteLine("I am a student from " + school);
7         }
8     }

编译后,没发现警告了,可运行效果并不是我想要的,最后一行的输出,并没有实现多态

技术分享图片

 

 现在在父类使用virtual关键字,在子类使用override关键字重写父类的方法。

 1  class Person
 2     {
 3         public virtual void Say()
 4         {
 5             Console.WriteLine("I am a person");
 6         }
 7     }
 8 
 9     class Stu:Person
10     {
11         public string school="Oxford";
12         public override void Say()
13         {
14             Console.WriteLine("I am a student from " + school);
15         }
16     }

运行效果如下:

技术分享图片

这样,我们通过在父类使用virtual关键字修饰方法,在子类使用override关键字重写父类方法,这样我们就正确实现了多态。

除了virtual关键字,我们还可以使用abstract关键字修饰父类的方法,可以实现相类似的功能,但abstract修饰的方法不能有实现,并且该方法所在的类必须是abstract类

扯不清楚的virtual和abstract

标签:school   控制   sof   microsoft   子类   work   idt   alt   write   

原文地址:http://www.cnblogs.com/yshuangj/p/7979613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!