资讯专栏INFORMATION COLUMN

Java父类强制转换子类原则

Amos / 2834人阅读

摘要:我们知道中子类转换成父类是没有任何问题的,那父类可以转换成子类吗来看下面这段程序结果是报类转异常转换正常。所以,想让父类强制转换成子类,不是没有可能,除非父类是子类构造出来的实例,不然是不能强转的。

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

我们知道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,所以说父类只有该子类对应的实例才能强转。

推荐阅读

干货:Spring Boot & Cloud 最强技术教程

工具:推荐一款在线创作流程图、思维导图软件

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71388.html

相关文章

  • 【从基础学 Java】继承

    摘要:快速了解继承在的继承关系里子类可以从获取父类的所有的公共和受保护成员字段方法和内部类。阻止继承有些情况下,我们可能不希望子类覆盖父类的方法,这时候,用关键字修饰方法即可实现该目的。 和现实世界中:子女可以继承父母的一些特征(如:基因)、财产等一样。OOP 中也有提供类似的特性,一个类完全可以从其它类里获得一些属性和方法,而不需要我们自己重新定义。这种特性简单但强大 (Simple an...

    Dongjie_Liu 评论0 收藏0
  • 嘻哈说:设计模式之里氏替换原则

    摘要:定义按照惯例,首先我们来看一下里氏替换原则的定义。同样覆盖了父类的非抽象方法,并将逻辑更改为跳舞,这要是违背了里氏替换原则的。而重写显然是不符合里氏替换原则的。里氏替换原则的核心思想就是继承,所以优点就是继承的优点。 showImg(https://user-gold-cdn.xitu.io/2018/9/19/165f1897234ef1d4?w=600&h=350&f=jpeg&s...

    dendoink 评论0 收藏0
  • 9. java 多态

    摘要:概念所谓多态,就是指一个引用变量类型在不同的情况下的多种状态。需进行强制转换有风险,最好使用进行判断。继承在多态中必须存在有继承关系的子类和父类。在中有两种形式可以实现多态继承和接口。 概念 所谓多态,就是指一个引用变量(类型)在不同的情况下的多种状态。也可以理解为,多态是指通过指向父类的指针,来调用在不同子类中实现的方法。多态性是对象多种表现形式的体现 多态性严格来说有两种描述形式:...

    wanglu1209 评论0 收藏0
  • Java笔记 - 重写/重载,向上转型/向下转型

    摘要:所以静态方法不能被覆盖。虽然就算你重写静态方法,编译器也不会报错。也就是说,如果你试图重写静态方法,不会阻止你这么做,但你却得不到预期的结果重写仅对非静态方法有用。我们应该直接使用类名来访问静态方法,而不要使用对象引用来访问。 重写/重载 重写指的是根据运行时对象的类型来决定调用哪个方法,而不是根据编译时的类型。所以静态方法不能被覆盖。 (如果从重写方法会有什么特点来看,我们是不能...

    qqlcbb 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<