package object; //向上转型-向下转型 public class Up_Down_convert { /* 向上转型 * * 1.上转型对象可以使用和操作子类继承或者重写的方法 * 2.上转型丧失了对子类【新增成员】或者【新增方法】的操作和使用 * */ public void upConvert(){ Father father_a = new Son(); father_a.say(); father_a.action(); } /* 向下转型 * * 1.把指向子类对象的父类引用赋给子类引用,叫向下转型 * 2.要强制转换 * 3.向下转型后的实例可以重新获得因向上转型而失去的方法(子类独有的) * */ public void downConvert(){ Father father_a = new Son();//先向上转型(转至父亲类) father_a = (Son)father_a;//error:再向下(强制)转型 father_a.say(); father_a.action(); // father_a.getMoney();//此方法(子类独有)无法使用 System.out.print("************************** "); Father father_b = new Son();//先向上转型(转至父亲类) Son son = (Son)father_b; //right:另外新声明一个儿子对象,再向下转型实例化 son.say(); son.action(); son.getMoney();//上转型后,此方法仍(子类独有)可以【继续恢复使用】 } public static void main(String args[]){ new Up_Down_convert().upConvert();//向上转型 //output:我是儿子! 儿子去上学! System.out.print("************************** "); new Up_Down_convert().downConvert();//向下转型 } } class Father{ public void say(){ System.out.print("我是父亲! "); } public void action(){ System.out.println("父亲去上班! "); } } class Son extends Father{ public void say(){ System.out.print("我是儿子! "); } public void action(){ System.out.println("儿子去上学! "); } public void getMoney(){ System.out.print("儿子要生活费! "); } }
output:
我是儿子! 儿子去上学! ************************** 我是儿子! 儿子去上学! ************************** 我是儿子! 儿子去上学! 儿子要生活费!