gpt4 book ai didi

java - ArrayList 中的 SubClass 对象是否保留 SubClass 独有的方法?

转载 作者:行者123 更新时间:2023-11-30 06:21:36 27 4
gpt4 key购买 nike

基本上是标题所说的内容,但有一些详细说明。我有一个带有几个子类的父类(super class)。我需要一个 ArrayList 来保存两种类型的子类,因此需要 SuperClass 类型的 ArrayList。我尝试使用 ArrayList.get(0).getQuantity(); 访问 Subclass1 的 getQuantity() 方法(假设索引 0 是 SubClass1 类型)。我收到错误消息:对于 SuperClass 类型,getQuantity 未定义。

当放入父类(super class) ArrayList 时,子类对象是否不保留其属性?如果他们确实保留了他们的属性(property),我该如何访问它们?

最佳答案

对象本身仍然是一个子类,但是当您将它们从集合中取出时,它只知道父类(super class),所以它无法告诉您哪个是哪个。 , 它必须选择公分母。

如果您确切地知道特定索引包含子类类型的对象,您可以直接转换它:

Subclass myObject = (Subclass) list.get(0);
System.out.println(myObject.getQuantity());

它应该可以工作。

更安全的方法是测试对象是否真的如您所想:

SuperClass myObject = list.get(0);
if ( myObject instanceof Subclass) {
Subclass mySubObject = (Subclass) myObject;
System.out.println(mySubObject.getQuantity());
}

如果对象不是 Subclass 类型,第一个示例将引发异常,第二个示例不会,因为它之前进行了测试以确保。

这里需要明白的是,SuperClass myObject = list.get(0)并不是对象本身,而是访问内存中对象的引用。把它想象成一个允许你控制你的对象的 Remote ,在这种情况下,它不是一个功能齐全的 Remote ,因为它没有向你展示你的对象可以做的所有事情,所以你可以切换到一个更好的 Remote (如 Subclass myObject = (Subclass) list.get(0)) 以便能够访问所有功能。

我肯定会推荐 Head First Java book因为它非常详细地介绍了这些东西(我从那里偷了这个远程示例)。

关于java - ArrayList<SuperClass> 中的 SubClass 对象是否保留 SubClass 独有的方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20295671/

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