1. 程式人生 > >Java SE之向上轉型與向下轉型

Java SE之向上轉型與向下轉型

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之向上轉型與向下轉型