b 并不是 Sub 类型的实例。
Base b = new Sub();
Sub s = (Sub)b;
才会成立, 对象的实例是不可能改变的,创建了之后就总是那个类型的,你怎么 Cast 都一样,Cast 只是改变了 某些字段和方法的 可见性,向上 Cast 之后 Sub 中有些东西就看不到了,只能看到 Base 中的, 向下 Cast 就又能看到原来 Sub 中有的东西.
对象的实例是什么类型的,永远不变。
Base b = new Sub();
Sub s = (Sub)b;
才会成立, 对象的实例是不可能改变的,创建了之后就总是那个类型的,你怎么 Cast 都一样,Cast 只是改变了 某些字段和方法的 可见性,向上 Cast 之后 Sub 中有些东西就看不到了,只能看到 Base 中的, 向下 Cast 就又能看到原来 Sub 中有的东西.
对象的实例是什么类型的,永远不变。
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货