先看两个类:
//Fahther类class Father{ public void out() { System.out.PRintln("father"); }}//Son类,继承自Fatherclass Son extends Father{ public void out() { System.out.println("son"); } public void out2() { System.out.println("son2"); }}向上转型示例: Father father=new Son();//定义了一个Father的变量,实际上却赋值了一个Son类型
2.1 向上转型的时候,会遗失子类独有的方法,根据以上两个类,Son类转型成为Father类的时候,Son类的“out2”方法会遗失。也就说以下写法会报错:
Father father=new Son();father.out2();//会报错2.2 向上转型的对象可以调用父类拥有的方法,具体执行的是子类原本的代码块
Father father=new Son();father.out();//因为father变量引用的本质还是new Son,所以father.out()会执行Son类的out()代码块.顾名思义,向下转型就是:Father -> Son 但是,有条件。
Father father = new Father();Son son=(Father)father;//这是不允许的以上代码就是不被允许的,因为:只有本质是子类的类型才能被向下转型 以上代码中,father本质是new Father()。
只有被向上转型过的子类,才能执行向下转型
Father father=new Son();Son son=(Son) father;//这是可行的,因为father变量引用的是new Son(),它本质上是一个Son类的对象输出: 
新闻热点
疑难解答