面向对象关键字-new virtual override base

virtual 虚拟的

virtual标记的方法或属性,本质上是在内存空间中做了定义,但其对应的地址是不固定的,是在运行时根据规则来判定的。

A类 对象名=new B类(),A类叫做申明类,B类叫做实例类

规则:

1 当调用方法时,先检查在申明类中该方法是否是virtual,如果不是虚方法则直接执行,如果是虚方法则需检查实例类。

2 在实例类中检查是否有override该方法,如果有则直接调用该方法,如没有则在其父类中逐级查找,直到找到第一个override方法。

 

注意virtual标记的方法被override,override的方法也是virtual的

 

代码小练习

 1 class People
 2 {
 3     public virtual void SayHi()
 4     {
 5         Console.WriteLine("打招呼!");
 6     }
 7 }
 8 
 9 class Student:People
10 {
11     public override void SayHi()
12     {
13         Console.WriteLine("学生好!");
14     }
15 }
16 
17 class Teacher:People
18 {
19     public new void SayHi()
20     {
21         Console.WriteLine("老师好!");
22     }
23 }
24 
25 class XY:Student
26 {
27 }
28 static void Main(string[] args)
29 {
30     People p0 = new People();
31     People p1 = new Student();
32     People p2 = new Teacher();
33     People p3 = new XY();
34     
35     p0.SayHi();
36     p1.SayHi();
37     p2.SayHi();
38     p3.SayHi();
39     Console.ReadKey();
40 }
View Code

代码分析:

p0.SayHi();p0申明类和实例类都是Person 输出 打招呼!

p1.SayHi();p1实例类是Student,重写了申明类Person的SayHi方法,输出 学生好

p2.SayHi();p2实例类是Teacher,没有重写,父类Person虚方法,输出 打招呼!

P3.SayHi();p3实例类是XY,XY中没有重写,父类Student中重写了,输出 学生好

 

new

new关键在在面向对象中,有两种功能,其一是调用构造方法,创建对象,开辟空间

另一是覆盖基类的方法或属性

new 和override的区别

1 两个关键字都是用于继承中

2 override 只能用于virtual abstract override修饰的方法或属性

3 new 可用于非abstract,非override修饰的方法或属性,调用时取决于申明类的类型

不用new也能构成覆盖。

Base

调用基类方法(构造方法和其他方法)

 1 class People 
 2 {
 3     public string Name { get; set; }
 4     
 5     public People()
 6     {
 7     }
 8 
 9     Public People(string nane)
10     {
11         this.Name = name;
12     }
13     
14     public virtual void SayHi()
15     {
16         Console.WriteLine("{0},你好!",);
17     }
18 }
19 
20 class Student:People
21 {
22     public Student()
23     {
24     }
25     
26     public Student(string name):base(name)
27     {
28     }
29     
30     public override void SayHi()
31     {
32         base.SayHi();
33     }
34 }
View Code

 

posted @ 2021-01-08 16:38  htiu  阅读(113)  评论(0编辑  收藏  举报