Java SE之向上轉型與向下轉型
阿新 • • 發佈:2017-09-21
args color 繼續 生活費 div 重新 rgs ror new
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("**************************\n"); 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("**************************\n"); 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:
我是兒子! 兒子去上學! ************************** 我是兒子! 兒子去上學! ************************** 我是兒子! 兒子去上學! 兒子要生活費!
Java SE之向上轉型與向下轉型