问题描述
- 一个自学的人,突然碰到不懂得地方
-
class Dog extends Animal譬如dog定义了自己的方法wangwang
Animal anAnimal = new Dog();
此时不能直接调用anAnimal.wangwang方法
但是可以
if( anAnimal instanceof Dog){
Dog dog = (Dog)anAnimal;
dog.wangwang就可以调用了
Dog dog = (Dog)anAnimal;这个是什么用法?
解决方案
就是对象的强转呗:
Animal anAnimal = new Dog();
这个是父类的引用指向了子类的对象,从父类的角度看是没有wangwang方法的,所以你点不出来。
但是实际上new Dog(),他得到的是Dog的对象。(Dog)anAnimal可以把父类的声明强转成子类对象,进行调用。
解决方案二:
向下造型,向下造型本来是不安全的,但一开始,你ananimal对象就指向了dog,所以 anAnimal instanceof Dog是true,就可以向下造型
解决方案三:
代码放上来看看。dog和Animal
解决方案四:
谢谢各位大神,其实我看了一遍代码懂了用法,可是不怎么清楚原理。
回复3楼老师:没有源码,是百度问答里的一个答案,我直接COPY过来了。
时间: 2024-11-26 19:56:49