gpt4 book ai didi

Java 向下转型和 is-A has-A 关系

转载 作者:行者123 更新时间:2023-12-01 07:42:13 26 4
gpt4 key购买 nike

嗨,

我有一个令人沮丧的问题,我在这方面有点生疏。我有两个这样的类(class):

class A{ int i; String j ; //Getters and setters}
class B extends A{ String k; //getter and setter}

我在实用程序帮助器类中有一个这样的方法:

public static A converts(C c){}

其中C是从数据库中退出然后转换的对象。

问题是我想通过传入“C”并返回 B 来调用上述方法。所以我尝试了这个:

B bClasss = (B) Utility.converts(c);

因此,即使上述方法返回 A,我也尝试将其向下转换为 B,但我得到了运行时 ClassCastException。难道真的没有办法解决这个问题吗?我是否必须编写一个单独的 Converts() 方法来返回 B 类类型?

如果我声明我的 B 类:

class B { String k; A a;} // So instead of extending A it has-a A, getter and setters also

然后我可以像这样调用我现有的方法:

b.setA(Utility.converts(c) );

这样我就可以重用现有的方法,即使扩展关系更有意义。我应该怎么办?非常感谢任何帮助。谢谢。

最佳答案

从类型A到类型B的转换:

B bClasss = (B) Utility.converts(c);

不起作用,因为A类型的对象不具有可能从B类型的引用调用的所有方法。如果您调用,您期望会发生什么

bClasss.getK();

在下一行?底层对象没有成员变量k,因此不允许这种强制转换。

您可以使用类层次结构中较高类型的引用来引用较低类型的对象,但反之则不然。

在不了解更多信息的情况下,我认为最好的办法是实现多种方法

A aObj = Utility.convertToA(c);
B bObj = Utility.convertToB(c);

如果 B 扩展 A,那么您仍然应该受益于类构造函数中的一些代码重用。

关于Java 向下转型和 is-A has-A 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2829575/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com