对象的转型是基于对象多态性和继承性实现的。也就是说对象转型发生在父、子类中,通常伴随子类重写父类的方法。
对象向上、向下转型,观察代码
class Father{
public void who(){
System.out.println("我是你巴巴");
}
}
class Son extends Father{
public void who(){
System.out.println("我是巴巴的龟儿子");
}
public void homework(){
System.out.println("我在写作业");
}
}
public class Test {
public static void main(String[] args) {
Father father = new Son();
father.who();
Son son = (Son) father;
son.homework();
}
}
/******************输出****************************/
我是巴巴的龟儿子
我在写作业
Father father = new Son();//对象的向上转型
那么如何判断是否发生了对象的向上转型呢?我们只需要观察new后面的对象,new子类就是向上转型。当子类重写父类的方法后,则调用子类重写后的方法。
Son son = (Son) father;//对象的向下转型,儿子需要写作业,巴巴不需要吧,儿子不听话,强制他写作业
那么如何判断是否发生了对象的向下转型呢?我们只需要观察是否有强制转换的代码。
对象转型在jdk类库中的应用
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("abc");
ArrayList<String> arrayList = (ArrayList<String>) list;//向下转型
ArrayList<String> clone = (ArrayList<String>)arrayList.clone();//调用子类的克隆方法(深克隆)
clone.add("123");
System.out.println(list);
System.out.println(clone);
}
/******************输出****************************/
[abc]
[abc, 123]
对象转型的好处;向上转型可以统一参数的接收和返回。向下转型体现了类之间的层次结构以及方法调用的灵活性、抽象性。