sách gpt4 ai đã đi

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

In lại 作者:行者123 更新时间:2023-12-01 07:42:13 28 4
mua khóa gpt4 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) );

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

1 Câu trả lời

从类型MỘT到类型B的转换:

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

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

bClasss.getK();

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

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

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

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

nếu như B Phần mở rộng MỘT,那么您仍然应该受益于类构造函数中的一些代码重用。

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

28 4 0
Bài viết được đề xuất: python - 为什么在此实现中递归比迭代更快? (Python 反转链表)
Bài viết được đề xuất: java - 重复的正则表达式
Bài viết được đề xuất: latex - 使用 LaTeX 使算法更具可读性
Bài viết được đề xuất: java - 关于 Java 中的 Hashmap 的帮助
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com