B继承A A a=new B();B a=new B()区别 public abstract class A { public A() {Console.WriteLine('A');} public virtual void Fun() {Console.WriteLine("A.Fun()");} } public class B : A { public B() {Console.WriteLine('B');} public new void Fun() {Console.WriteLine("B.Fun()");} public static void Main() { A a = new B(); a.Fun(); } } 他的输出时 A B A.Fun() A a=new B(); 这里a编译时类型是A,运行类型是B". 所以构造函数的调用就清晰明了吧 然而还是有点奇怪,如果a运行时类型是B的话,那么在调用方法F()时,为什么不调用B的方法F()(而是调用 A 的方法F())呢? 这是因为父类引用指向子类的对象(实例) 这时候 会调用子类重写的方法 但是不能调用子类自己的方法(父类没有的) 再有就是override与new得区别 如过程序里面的new换成override输出时是什么样子呢? 将会是 A B B.Fun();这是为什么呢 override的“覆盖”也就是次数重写是指子类覆盖了父类思路方法子类对象无法再访问父类中该思路方法 new是指“隐藏”是指子类隐藏了父类思路方法当然通过定转换可以在子类对象中访问父类思路方法
1.B继承A,请问a是A的实例还是B的实例啊? 2.对象a可以调用A类中的方法吗?可以调用B的方法吗? |
|