日期:2014-05-20  浏览次数:20614 次

向上/下转型的问题
为什么要用向上转型和向下转型,以及在什么情况下使用?

------解决方案--------------------
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的泛型
来实现。