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

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:spa

我是兒子! 兒子去上學! 
**************************
我是兒子! 兒子去上學! 
**************************
我是兒子! 兒子去上學! 
兒子要生活費! 
相關文章
相關標籤/搜索