美文网首页CWIKIUS
Java 继承关系中的 java.lang.ClassCastE

Java 继承关系中的 java.lang.ClassCastE

作者: HoneyMoose | 来源:发表于2022-01-26 21:35 被阅读0次

通常我们在 OOP 设计中都会使用到继承。

但是在继承对象之间的强制转换可能会遇到java.lang.ClassCastException异常的错误。

错误的日志如下:

19:58:25.010 [http-nio-8080-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed;nestedexceptionisjava.lang.ClassCastException:classcom.ossez.usreio.mls.common.models.response.ListingResponsecannotbecasttoclasscom.ossez.usreio.mls.common.models.response.ListingDetailResponse(com.ossez.usreio.mls.common.models.response.ListingResponse and com.ossez.usreio.mls.common.models.response.ListingDetailResponse are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader@4ee285c6)]withrootcausejava.lang.ClassCastException:classcom.ossez.usreio.mls.common.models.response.ListingResponsecannotbecasttoclasscom.ossez.usreio.mls.common.models.response.ListingDetailResponse(com.ossez.usreio.mls.common.models.response.ListingResponse and com.ossez.usreio.mls.common.models.response.ListingDetailResponse are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader@4ee285c6)

问题和原因

这个问题出现的原因就是继承类之间强制转换的错误。

同时这个错误是运行时错误,不是编译错误,因此你编译的时候是没有这个错误的。

考察下面的代码:

Parentb = new parent();Childc = (Child) b ;

采用该方法不能实现对象类型由超类向子类的转换。

上面的原因是父类的对象是由父类创建的,然后你尝试将父类创建的对象强制转换到子类中。

因为父类创建的对象和子类需要创建的对象分别使用不同的地址空间,那在转换的时候将会出现地址空间引用的错误,因此 JVM 会认为你将 2 个完全不同类型的对象进行转换,这个时候出现上面的运行时错误。

要解决这个问题的办法就是在创建父类的时候使用子类来创建,并且强制将创建的父类转换为子类就可以了。

使用这种创建方法就能保证使用相同的地址空间。

将上面的语句改成:

Parentb = new Child ();Childc = (Child) b ;

就可以了。

https://www.ossez.com/t/java-java-lang-classcastexception/13862

相关文章

  • Java 继承关系中的 java.lang.ClassCastE

    通常我们在 OOP 设计中都会使用到继承。 但是在继承对象之间的强制转换可能会遇到java.lang.ClassC...

  • Java初级笔记No.3(更新中)

    2018.7.26 1、Java中的继承 Java中使用extends关键字来说明继承关系。 2、继承的特性 ja...

  • Java中的继承

    Java中的继承 Java 继承 什么是继承 继承是用来描述“is-a”的关系;如果说两个对象A和B,若可以描述成...

  • Java中的继承

    继承 继承的概念: 继承是类与类的一种关系,是一种“is a”的关系 注:Java中的继承是单继承 3. 继承的好...

  • java基础——继承

    现实生活中有继承的关系,Java中也有继承的关系,所以说,Java来源于生活。实际上,Java是一门比较容易学习的...

  • 2.3 继承 (面向对象)

    1、Java中的继承 继承是类与类的一种关系Java中的继承是单继承的,即每个子类只有一个父类 继承的好处子类拥有...

  • Java入门第二季第三章

    继承 1.继承的概念: 继承是类与类的一种关系,是一种“is a”的关系; 注:java中的继承是单继承; 2.继...

  • 继承

    继承 继承是类与类的关系,是一种“is a”的关系。Java 中的继承为单继承 1. 作用 子类拥有父类的所有属性...

  • JAVA(9)继承与多态

    继承与多态 、抽象类、接口 继承: 继承是类与类的一种关系 java中的继承是单继承 继承的好处: 子类拥有父类的...

  • 异常的处理

    1.Java的异常 Java的异常是class,它的继承关系如下: 从继承关系可知:Throwable是异常体系的...

网友评论

    本文标题:Java 继承关系中的 java.lang.ClassCastE

    本文链接:https://www.haomeiwen.com/subject/nhvphrtx.html