向上/下转型的问题
为什么要用向上转型和向下转型,以及在什么情况下使用?
------解决方案--------------------Dog d = new Dog();
Bird b = new Bird();
test(d);test(b);//传参 向上转型
void test(Animal a){
if(a instanceof Dog){
Dog d = (Dog)a; // 向下转型
d.shout()
}
else if (a instanceof Bird){
Bird b = (Bird)a; //向下转型
b.fly();
}
}
copy了段代码 你自己看吧
------解决方案--------------------向上转型是为了保护子类的特有字段属性或方法
------解决方案--------------------
这个概念不错啊,本来不知道向上转型是什么目的,感觉一般根本不需要向上转型,任何一个子类本身就已经是父类类型了
向下转型不像向上转型,它有可能失败,而向下转型的需要,也恰恰是多态引起的
如果某子类被声明为其父类类型,即其对象不向下转型的话,那么其对象无法访问子类特有属性和方法
Father father = new Son();
------解决方案--------------------
向上转型就是父类引用指向子类对象,是java多态机制的一个要素吧
向下转型:就是你将对象放在容器中,但是容器是存放Object
对象。因此就必须向下转型。但是当我们重新从容器中获取对象时
对象是一个Object类型的引用,如何知道他是那个具体类型的呢?
如果事先知道就可以直接强转了,但是最好还是使用java的
泛型
来实现。