[英]getting objects from ArrayList<object>
我有 3 個類:一個是抽象類,名為MyClass1
,另外兩個擴展MyClass1
,名為MyClass2
和MyClass3
。
我創建了一個MyClass1
類型 ex 的ArrayList
:
ArrayList<MyClass1> myArray=new ArrayList<MyClass1>();
然后我在MyClass2
和MyClass3
類中創建一些對象,並將它們添加到我之前創建的ArrayList
中。 問題是如何使用我在ArrayList
中添加的對象來調用方法
如建議的那樣,不要將您的類命名為 Object。
您必須轉換對象才能調用子類中聲明的方法:
abstract class FirstClass {
public void firstMethod() {
}
}
class SecondClass extends FirstClass {
public void secondMethod() {
}
}
class ThirdClass extends FirstClass {
public void thirdMethod() {
}
}
....
public void run() {
ArrayList<FirstClass> list = new ArrayList<>();
list.add(new SecondClass());
list.add(new ThirdClass());
for (FirstClass obj : list) {
obj.firstMethod(); //No cast needed
if (obj instanceof SecondClass) {
SecondClass objOfSecond = (SecondClass) obj;
objOfSecond();
}
if (obj instanceof ThirdClass) {
ThirdClass objOfThird = (ThirdClass) obj;
objOfThird();
}
}
}
選項 1:如果您的基類 ( Object1
) 獲得了方法,您可以在每個子類 ( Object2
/ Obejct3
) 上調用它
選項 2:如果要調用未在基類中定義的子類上的方法,則需要將 Object 強制轉換為特定類才能調用該方法。
例子:
for (Object1 myObject1 : myArray){
if (myObject1 instanceof Object2){
Object2 myObject2 = (Object2)myObject1;
myObject2.myMethod();
}
}
是的,不要命名您的類Object
,因為 Java 已經將這個名稱用作“基礎/根對象”。
這個問題有點難以理解,因為在 Java 中使用 Object 作為關鍵字,在談論面向對象語言時是一個具有特定含義的詞,現在是一個特定的類,所以我將重命名我們正在談論的類即將SomeObject
。
當您的SomeObject
對象的 ArrayList 被聲明時,它將如下所示:
List<SomeObject> myArray = new ArrayList<>();
然后添加 SomeObject 的實例:
myArray.add(new SomeObject());
然后您可以通過索引訪問對象,並直接在該對象上調用方法。 在這里,我調用了SomeObject
類的someMethod
方法。
int i = 0; //used as index
myArray.get(i).someMethod();
請記住,如果SomeObject
具有子類(例如SomeOtherObject
),則絕對允許您將SomeOtherObject
的實例添加到SomeObject
ArrayList。 但是,如果您向 ArrayList 添加了多個子類,然后嘗試調用子類獨有的方法,則會遇到問題。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.