using System;using System.Collections.Generic;using System.Text;
namespace 类的继承问题02{ class Program { static void Main(string[] args) { //B Ba = new B(); //A Aa = Ba; //Aa.BaseMethod();
A Aa = new A(); Aa.BaseMethod();//调用自身的BaseMethod()方法
B Ba = new B(); Ba.BaseMethod(); /*调用自身的BaseMethod()方法。同时B类虽然派生于A类, 但B类用new保留字把 基类A中的BaseMethod()方法隐藏了,所以A类中的BaseMethod()方法对B类是不可见的 */
//C Ca = new C(); //A Aa = Ca; //Aa.BaseMethod();
//if (Aa != null) //{ // Console.WriteLine("Aa已经初始化");
//} //else //{ // Console.WriteLine("Aa没有被初始化"); //}
Console.ReadKey(); } } class A { public virtual void BaseMethod() //基类的这个方法也可以不是虚拟的,即可以把virtual去掉 { Console.WriteLine("ABaseMethod"); } } class B : A { public new virtual void BaseMethod() //public和new可以互换位置,因为他们都是修饰符,所以可以调换位置 { Console.WriteLine("BBaseMethod"); }
} class C : A //C和B都继承自A,同时他们都把A中的BaseMethod()方法隐藏了,A类中的virtual可以有也可以没有都可以隐藏基类的BaseMethod()方法 { public new void BaseMethod() { Console.WriteLine("CBaseMethod"); } } class D : A { public virtual void BaseMethod() //省去new则发出警告,所以说省去new也可以隐藏基类的方法 { Console.WriteLine("CBaseMethod"); } } class E : A { public void BaseMethod() //省去new则发出警告,所以说省去new也可以隐藏基类的方法 { Console.WriteLine("CBaseMethod"); } }}//省去new则发出警告,产生两个警告的原因是:编译器是怕你不小心隐藏了某个不该隐藏的基类成员
