a.F();
b.F();
a.G();
b.G();
}
}
}
输出结果:
A.F
B.F
B.G
B.G
(疑惑之处:A a=b这个过程,在堆栈上的地址是怎么指向堆的呢,我们经常用抽象类做父类,来引用子类。内存是怎么一个分配过程呢)
------
懂了,其实也可以看成是调用的B的方法,因为B继承了A里面所有的方法。如果重写了就是调用B的,很简单的问题,却让自己给想复杂了。呵呵,
使用 new 关键字时,调用的是新的类成员而不是已被替换的基类成员。这些基类成员称为隐藏成员。如果将派生类的实例强制转换为基类的实例,就仍然可以调用隐藏类成员。例如:本例子中:A a=b,实际是将子类强制性转换成了父类。
a.Fun2(b);
b.Fun2(a);
Console.ReadKey();
}
}
这道题输出:2 5 1 6