14.1类和接口继承14.2定义接口 14.3接口的继承 public static class Program { static void Main(String[] args) { //------------------------- Console.WriteLine("---第一个例子---"); BaseClass b = new BaseClass(); b.fun1(); b.fun2(); ((Itest)b).fun1(); ((Itest)b).fun2(); //-------------------------- Console.WriteLine("---第二个例子---"); SonOne s1 = new SonOne(); s1.fun1(); s1.fun2(); ((Itest)s1).fun1(); ((Itest)s1).fun2(); //---------------------------- Console.WriteLine("---第三个例子---"); b = new SonOne(); b.fun1(); b.fun2(); ((Itest)b).fun1(); ((Itest)b).fun2(); //---------------------------- Console.WriteLine("---第四个例子---"); SonTwo s2 = new SonTwo(); s2.fun1(); s2.fun2(); ((Itest)s2).fun1(); ((Itest)s2).fun2(); //---------------------------- Console.WriteLine("---第五个例子---"); b = new SonTwo(); b.fun1(); b.fun2(); ((Itest)b).fun1(); ((Itest)b).fun2(); //---------------------------- Console.ReadLine(); } } public interface Itest { void fun1(); void fun2(); } //1.BaseClass必须实现Itest中的所有方法 fun1,fun2 //2.应将接口方法标记为virtual,如果不显示标记,编译器会把它标记为virtual和sealed。这样派生类就无法重写接口方法了。 // 派生类可以重新继承同一个接口,并提供自己的实现。 internal class BaseClass : Itest { //fun1将被标记为sealed,不能被重写 public void fun1() { Console.WriteLine("BaseClass.fun1"); } public virtual void fun2() { Console.WriteLine("BaseClass.fun2"); } } internal class SonOne : BaseClass { //派生类无法重写基类方法fun1 new public void fun1() { Console.WriteLine("SonOne.fun1"); } //派生类可以重写基类方法fun2 public override void fun2() { Console.WriteLine("SonOne.fun2"); } } internal class SonTwo : BaseClass, Itest { //派生类无法重写基类方法fun1,new表示重新实现Itest的fun1 new public void fun1() { Console.WriteLine("SonOne.fun1"); } //派生类可以重写基类方法fun2 public override void fun2() { Console.WriteLine("SonOne.fun2"); } } 结果: