在面向对象的语言中,继承和多态是十分重要的两个特征。目前,C#和Java均为单继承多接口语言,能够有效利用面向对象的特征进行编程。其中继承是一个将类具体化的过程,继承深度越高,类就越具体。多态则是用不同的具体化方法实现同一种功能的接口,让父类具有子类的特征。同时多态可以实现代码的复用。
1. virtual方法
virtual方法定义基类中的虚函数,这种函数可以被子类继承,并在子类中被override成具有子类特性的新函数。比如:
public virtual int sum(){} //……在基类中
public override int sum(){} //……在子类中
注意,C#中的override关键字,在子类中覆盖函数,此时基类改变此函数,子类并不会发生变化,起到了保护的作用。
2. new修饰符
和override比较,new可以显示地隐藏从基类继承的成员函数。虽然都是使用子类自己的函数,但是new会隐藏掉、截断掉基类的函数,而override则会扩展基类函数的功能。下面看一个例子:
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace ConsoleApplication1 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 A objA = new D(); 14 A objB = new B(); 15 C objC = new D(); 16 A objD = new A(); 17 objA.Movie(); 18 objB.Movie(); 19 objC.Movie(); 20 objD.Movie(); 21 22 } 23 class A { 24 public virtual void Movie() { 25 Console.WriteLine("MikiMouse"); 26 } 27 } 28 class B : A { 29 public override void Movie () { 30 Console.WriteLine("DisneyMovie"); 31 } 32 } 33 34 class C : B { 35 public new virtual void Movie () { 36 Console.WriteLine("Snow White"); 37 } 38 } 39 class D : C { 40 public override void Movie () { 41 Console.WriteLine("Seven Dwarfs "); 42 } 43 } 44 45 } 46 }
其输出结果是:
简而言之,new virtual相当于一个断点,截断了继承流。
时间: 2024-10-30 13:35:43