o对象 虽然声明的是 Tearcher类对象, 但是 o对象本身类型是 object, 公共父类 object ,它是没有子类的方法的访问权限的, 你只有将 o对象 强转成 Teacher对象才能调用 Teacher类对象的成员方法
((Teacher) o).Teach();
因为你的o声明的object类型,虽然你后面写了new Teacher, 这里其实方式了隐式类型转换,或者说向上转型,new Teacher 自动被转成了obejct。
所以o调不到Teacher的方法
简单来说,你可以理解成下面这样
object 是在对象上覆盖一个长宽10✖10的红玻璃
O是是在这个object 这个红玻璃上覆盖了一层 20✖10的绿玻璃
所以你看到是:一部分是红+绿的黄色,另外一部分是O多出的绿色
转换成父类是什么:转换成父类其实就是抽了那层绿玻璃去看,所以你只能看到红玻璃范围的东西,而不能看到绿玻璃范围的东西
至于GetType这种那是override的,override修改的不是玻璃,修改的是对象本身。假设对象上在红玻璃范围里有个洞,你最后还是能看到这个洞
我们这个只是打比方去解释,以方便理解
如果你真想知道why?请看资料《你必须知道的net》---(对象生死,对象内存分布,对象方法表那几个章节)
《Clr via C#》这个书也行,不过这个比前一本难啃点(-------:)毕竟前一本是中文大话版,后面这个就是E文专著了)