using System; class B:A{ public override dynamic make(){ return "B"; } public static void Main(){ A a = new B(); Console.WriteLine(a.make()); } } class A{ public virtual dynamic make(){ return "A"; } }
这才是Java中的普遍继承现象。 这样也省的我把自己的Java思想覆盖了,因为有关键字约束。 new又是怎么回事呢? 可以这样解释:继承关系可以看作一条链,例如A:B,B:C(A继承B,B继承自C) 看作一条这样的链 C->B->A 假如三个类中都有相同函数 public void printText(){...}而关键字不同 C: public virtual void printText(){Console.WriteLine("C");} B: public override void printText(){Console.WriteLine("B");} A: public override void printText(){Console.WriteLine("A");} 现在如此实例化 C c=new A(); c.printText();//结果是A,这是正常现象(说是正常现象,是因为跟自己的Java知识不冲突) 而按照下面的函数声明(加入new)
C: public virtual void printText(){Console.WriteLine("C");} B: public override void printText(){Console.WriteLine("B");} A: public new void printText(){Console.WriteLine("A");}
也如上实例化并调用 C c=new A(); c.printText();//你能猜到答案是什么吗?