Java之向上转型,向下转型简单理解和实例

开心一笑

【我吓唬他要分手,他一边看足球一边哼哼哈哈地说:“分吧分吧,东西和钱都归你,我什么也不要,只要你走的时候别忘了带上我就行。】

视频教程

大家好,我录制的视频《Java之优雅编程之道》已经在CSDN学院发布了,有兴趣的同学可以购买观看,相信大家一定会收获到很多知识的。谢谢大家的支持……

视频地址:http://edu.csdn.net/lecturer/994

提出问题

java中的向上转型,向下转型简单理解???

解决问题

转型基础:有继承关系。

向上转型(upcasting):将子类对象转为父类对象。父类对象可以是接口。(儿子当爸爸)向上转型时,子类的新有的方法都会遗失掉。

向下转型(downcasting):父类引用的对象转换为子类类型,需要强转。(爸爸当儿子)

女神类:

/**
 * 描述:女神
 * @author Ay
 *
 */
class Girl extends Person{

    public Girl(){};

    public Girl(String name){
        super(name);
    };

    public Girl(String id,String name){
        super(id, name);
    }

    public void dress(){
        System.out.println("Girl" + "打扮......");
    }

    public static void birth(){
        System.out.println("Girl" + "降临人世间......");
    }

    public static void die(){
        System.out.println("Girl" + "走向人间天堂......");
    }

}

Person类:

/**
 * 描述:人类
 * @author Ay
 *
 */
class Person extends Object{

    protected String UNIQUE_FLAG = "Person";

    public Person(){
        System.out.println("Person created......");
    };

    public Person(String id,String name){
        super(id,name);
    }

    public Person(String name){
        super(name);
    }

    public static void birth(){
        System.out.println("降临人世间......");
    }

    public static void die(){
        System.out.println("走向人间天堂......");
    }


}

测试类:

public class AyTest {

    public static void main(String[] args){

        Person person = new Person();
        //向上转型
        Person girl = new Girl();
        girl.birth();
        //报错,向上转型子类的新有的方法都会遗失掉
        //girl.dress();
        //第一种:向下转型
        Girl downCastingGril = (Girl)girl;
        //女孩呼吸  正常运行
        downCastingGril.breath();
        //女孩打扮,正常运行
        downCastingGril.dress();
        //这里运行就会报错,报ClassCastException异常
        Girl errorGirl = (Girl)person;
        //运行错误
        errorGirl.breath();
        //运行错误
        errorGirl.dress();

    }
}   

运行结果:

Person created......
Person created......
降临人世间......
Person呼吸......
Girl打扮......
Exception in thread "main" java.lang.ClassCastException: com.evada.de.Person cannot be cast to com.evada.de.Girl
    at com.evada.de.AyTest.main(AyTest.java:27)

向上转型,静态绑定

public class AyTest {

    public static void main(String[] args){
        Person person = new Person();
        //向上转型
        Person girl = new Girl();
        //这里是静态绑定,打印结果是:降临人世间...... 而不是 Girl降临人世间......
        girl.birth();
    }
}

打印结果:

Person created......
Person created......
降临人世间......

向上转型,动态绑定

就是正常的动态绑定,可参考:Java之前期绑定,后期绑定,简单理解和实例

参考文章

【1】java向上转型和向下转型
【2】Java入门记(二):向上转型与向下转型
【3】Java编程思想(Thinking in Java)
【4】java向上转型与向下转型

读书感悟

来自《浮生六记》沈复

  • 越是不见,越是想见。越是想见,越是不敢。
  • 情之所钟,虽丑不嫌。
  • 从此扰扰攘攘,又不知梦醒何时耳。
  • 你的过去我来不及参与,你的未来我不会再错过。 归纳起来不外乎四个字: 相见恨晚。
  • 我吓唬他要分手,他一边看足球一边哼哼哈哈地说:“分吧分吧,东西和钱都归你,我 什么也不要,只要你走的时候别忘了带上我就行。”

其他

如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!

你可能感兴趣的:(一步一步学Java)