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:

我是儿子! 儿子去上学! 
**************************
我是儿子! 儿子去上学! 
**************************
我是儿子! 儿子去上学! 
儿子要生活费! 

 

posted @ 2017-09-20 21:50  千千寰宇  阅读(259)  评论(0编辑  收藏  举报