的向上转型和向下转型 有什么好处了? 进公司面试的时候 会问吗? 问道了该怎么回答合适了?
[code="java"]
举个例子:有两个类,Father是父类,Son类继承自Father。
Father f1 =new Son() ; //这就叫upcasting(向上转型 )
//现在f1 引用一个指向 一个Son 对象
Son s1 = (Son)f1 ; //这个叫downcasting(向下转型 )
//现在f1还是指向Son对象
第二个例子:
Father f2 =new Father();
Son s2=(Son)f2; //出错,子类引用不能直接指向父类对象
1.父类引用指向子类对象,子类引用不能指向父类对象。
2.把子类对象直接赋给父类引用叫upcasting向上转型,向上转型不用强制转型。
如Father f1=new Son();
3.把指向子类对象的父类引用赋给子类引用叫向下转型(downcasting),要强制转型。
如f1就是一个指向子类对象的父类引用,把f1赋给子类引用s1 即Son s1=(Son)f1;
其中f1前面的(Son)必须添加,进行强制转换。
4.upcasting 会丢失子类特有的方法(下面有说明),但是子类overriding 父类的方法,子类方法有效
5.向上转型的作用, 减少重复代码
[/code]
多态的向上转型就是为了同样类型的引用,调用同样的方法,在实际运行中可能会有不同的行为,这就实现了多态。
而向下转型,一般是比较少用的,一般用在需要具体拿到某个子类的引用,去调用子类特有的方法,这个就不是多态了。