专栏首页Java技术栈Java父类强制转换子类原则

Java父类强制转换子类原则

最近,微信群友在讨论子类父类的转换问题,其实不难,给大家用实例来说明一下就很明了了。

我们知道Java中子类转换成父类是没有任何问题的,那父类可以转换成子类吗?

来看下面这段程序:

public class TestObjectConvert {

    public static void main(String[] args) {
        test1();
        test2();
    }

    private static void test1() {
        Fruit fruit1 = new Fruit();
        Apple apple1 = new Apple();
        apple1 = (Apple) fruit1; // java.lang.ClassCastException
    }

    private static void test2() {
        Fruit fruit1 = new Apple();
        Apple apple1 = new Apple();
        apple1 = (Apple) fruit1;
    }

    static class Fruit {

    }

    static class Apple extends Fruit {

    }

}

结果是:

test1:报类转异常;
test2:转换正常。

所以,想让父类强制转换成子类,不是没有可能,除非父类是子类构造出来的实例,不然是不能强转的。

为什么呢?

如上代码,如果父类实例出来的对象是Orange,Orange当然不能强制转成Apple,所以说父类只有该子类对应的实例才能强转。

本文分享自微信公众号 - Java技术栈(javastack),作者:javastack

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-01-02

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Spring Boot 返回 JSON 数据,一分钟搞定!

    除了 Spring Boot 必须自带的 parent 依赖外,仅仅只需要加入这个 spring-boot-starter-web 包即可,它会自动包含所有 J...

    Java技术栈
  • Spring Boot @Scheduled 定时任务实战

    其中 @EnableScheduling 注解的作用是发现注解@Scheduled的任务并后台执行。

    Java技术栈
  • Spring Boot YML 掀翻 Properties!!

    那么,这两种格式的配置文件到底有哪些区别呢?哪个更好?能不能替换代替?今天,栈长就来解开这些谜团,看 YML 能不能掀翻Properties。。。

    Java技术栈
  • KMP(1)

    mathor
  • 从构建分布式秒杀系统聊聊商品详情页静态化

    大家都知道淘宝、天猫、京东以及聚美之类的电商网站,她们的商品页会存在多套模板,各套模板的元数据是一样的,只是展示方式不一样。特别是对于店主而言商品详情页个性化需...

    小柒2012
  • bookStore商城开发文档

    用户通过访问http://www.bookStore.com页面可能访问到书城首面。

    黑泽君
  • 从构建分布式秒杀系统聊聊商品详情页静态化

    小柒2012
  • 【Leetcode 206】关关的刷题日记70 – Leetcode 206. Reverse Linked List

    关关的刷题日记70 – Leetcode 206. Reverse Linked List 题目 Reverse a singly linked list. 题...

    WZEARW
  • PyTorch 学习笔记

    在 PyTorch 中 Tensor 代替了 NumPy 中的 Array,且可以使用 GPU 来加速计算。下面是一些例子。

    caoqi95
  • EV3程序(二)拐弯

    我们马路上的车是怎样拐弯的,这个大家应该都见过(司机转动方向盘,让前面的两个轮子转动一定角度,后面的轮子直接跟着往前滚动)

    用户7054460

扫码关注云+社区

领取腾讯云代金券