下面哪一项是正确的?( )
class Dog {}
class Harrier extends Dog {}
class DogTest {
public static void main(String[] args) {
Dog dl = new Dog();
Harrier hl = new Harrier();
Dog d2 = hl;
Harrier h2 = (Harrier) d2;
Harrier h3 = d2;
}
}2个Dog对象被创建
2个Harrier对象被创建
3个Harrier对象被创建
编译失败
创建一个父类的实例,想要强制把父类对象转换成子类的,不行!
通俗的想,父亲永远不可能转换成儿子。因为有空白,假如转换了,那么上幼儿园、哺乳,这些儿子的特有属性父亲是没有的,强转就出现了ClassCastException
父类对象引用着一个子类实例。
Son类特有的属性暂时不能通过 f 来操作,因为Father类没有Son类(子类)的特有属性。
接着创建子类对象 s,它引用的是父类对象 f 强制转换来的对象(其实就是个装爹的Son,把他强制转回了Son),这时就可以通过 s 来操作子类的特有属性了。
通俗的说就是儿子装爹,终究是儿子,本质没变,还是可以把他强制转回儿子的。
Harrier h3 = d2; 这句话没有做强制类型转换,d2是名义上的父类,父类与子类不兼容,但d2对象本身还是子类,只要强制转换还是能成功的
通俗的想,父亲永远不可能转换成儿子。因为有空白,假如转换了,那么上幼儿园、哺乳,这些儿子的特有属性父亲是没有的,强转就出现了ClassCastException
父类对象引用着一个子类实例。
Son类特有的属性暂时不能通过 f 来操作,因为Father类没有Son类(子类)的特有属性。
接着创建子类对象 s,它引用的是父类对象 f 强制转换来的对象(其实就是个装爹的Son,把他强制转回了Son),这时就可以通过 s 来操作子类的特有属性了。
通俗的说就是儿子装爹,终究是儿子,本质没变,还是可以把他强制转回儿子的。
Harrier h3 = d2; 这句话没有做强制类型转换,d2是名义上的父类,父类与子类不兼容,但d2对象本身还是子类,只要强制转换还是能成功的