我是靠谱客的博主 飞快大侠,最近开发中收集的这篇文章主要介绍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

最后

以上就是飞快大侠为你收集整理的java 强制类型转换问题的全部内容,希望文章能够帮你解决java 强制类型转换问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部