java 强制类型转换问题

记录一下强制类型转换

使用到的类

关系

    接口
public interface animal {
    public static animal getAnimal(int type){
        animal result=null;
        switch (type){
            case 1:
                result= new person();
                break;
            case 2:
                result= new man();
                break;
            case 3:
                result= new doctor();
                break;
            default:
                break;
        }
        return result;
    }
}
    person
public class person implements animal{
    private String name;
    private int age;

    @Override
    public String toString() {
        return "person{" +
                "name=" + name +  +
                ", age=" + age +
                };
    }

    public person() {
        System.out.println("person 正在构建");
    }
}
    man
public class man extends person{

    public man(){
        super();
        System.out.println("person 正在构建");
    }

    @Override
    public String toString() {
        return "man:"+super.toString();
    }
}
    doctor
public class doctor extends man{
    private String id;
    private String position;
    
    public doctor() {
        super();
        System.out.println("doctor 正在构建");
    }

    @Override
    public String toString() {
        return "doctor{" +
                "id=" + id +  +
                ", position=" + position +  +
                }+ super.toString();
    }
}
    测试
public class test {
    public static void main(String[] args) {
        animal a=animal.getAnimal(2);
        System.out.println(a);
        man m=(man)a;
        person p=(person)m;
        doctor d=(doctor)m;
    }
}
    运行结果

总结

    当对象被初始化之后,只能进行向下转换,而不能进行向上转换,例如这里我一开始将a初始化为man对象,那么它就无法升级为doctor。但是可以降级,变成它的父类以及它父类实现的接口,就如这里的person类,以及animal接口等。 当然,也可以进行升级。不过不是真正的升级,例如,你初始化对象是man对象,但是你用animal来接收,之后再通过强制类型转换来升级,这样是可以的,但是还是不能超过初始化时的上限,即无法到达doctor。

最初的想法(错误的)

我开始我觉得也可以向上进行升级,例如,我一开始初始化为man对象,可以将它升级为doctor,但是这里存在问题,向上升级的话需要调用子类的构造函数,可能会存在子类构造函数含参问题。

产生想法的地方

package com.jcraft.jsch 包下的ChannelSftp、ChannelSession、Channel

经验分享 程序员 微信小程序 职场和发展