码迷,mamicode.com
首页 > 编程语言 > 详细

java 向上转型与向下转型

时间:2018-01-27 15:24:38      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:直接   一个   col   public   new   xtend   strong   main   getname   

 

 

向上转型:子类转父类

Father father1=  new Son();

向下转型:父类转子类

Son son =  (Son)new Father (); // 这样是运行时会报错

Father father1 = new Son(); Son son1 = (Son) father1; // 这样不报错

 

 

通过写一个方法把父类转换为子类

class Father {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public <T extends Father> T to(Class<T> clazz) {
        T instance;
        try {
            instance = clazz.newInstance();
        } catch (Exception e) {
            throw new IllegalArgumentException("Failed to create " + clazz.getSimpleName() + " instance.", e);
        }

        instance.setName(this.getName());
        return instance;
    }
}

 

public class Son extends Father {

    private String age;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public static void main(String[] args) {

        // 子类转父类,父类再转子类
        // Father father = new Son();
        // Son son = (Son) father;

        // 父类直接转子类
        // Son son =  (Son)new Father (); // 运行时会报错

        // 父类通过方法转直接转子类
        Father father = new Father();
        Son son = father.to(Son.class);
    }

}

 

java 向上转型与向下转型

标签:直接   一个   col   public   new   xtend   strong   main   getname   

原文地址:https://www.cnblogs.com/ooo0/p/8365660.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!