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 包下的ChannelSftpChannelSessionChannel

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值