我有3个类:一个名为Object1
的抽象类和另外两个名为Object1
和Object2
的{{1}}。
我创建了一个Object3
ArrayList
类型
例如:
Object1
然后我在课程ArrayList<Object1> myArray=new ArrayList<Object1>();
和Object2
中创建了一些对象,并将它们添加到我之前创建的Object3
中。问题是如何使用我在ArrayList
中添加的对象来调用方法
答案 0 :(得分:0)
根据建议,不要将您的类命名为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 :(得分:0)
选项1:如果您的基类(Object1
)获得了方法,您可以在每个子类(Object2
/ Obejct3
)上调用它
选项2:如果要调用子类中未在基类中定义的方法,则需要将Object转换为Specific类以调用该方法。
示例:
for (Object1 myObject1 : myArray){
if (myObject1 instanceof Object2){
Object2 myObject2 = (Object2)myObject1;
myObject2.myMethod();
}
}
是的,不要将您的类命名为Object
,因为此名称已被Java用作“基础/根对象”。
答案 2 :(得分:0)
这个问题有点难以理解,因为在Java中使用Object作为关键词,在谈论面向对象语言时具有特定含义的词,现在是一个特定的类,所以我将重命名我们正在谈论SomeObject
。
当声明SomeObject
个对象的ArrayList时,它将如下所示:
List<SomeObject> myArray = new ArrayList<>();
然后添加SomeObject的实例:
myArray.add(new SomeObject());
然后您可以通过索引访问对象,并直接在该对象上调用方法。在这里,我调用someMethod
类的SomeObject
方法。
int i = 0; //used as index
myArray.get(i).someMethod();
请记住,如果SomeObject
有子类(例如SomeOtherObject
),则绝对允许您将SomeOtherObject
的实例添加到SomeObject
ArrayList中。但是,如果已向ArrayList添加了多个子类,则会遇到问题,然后尝试调用子类唯一的方法。
希望这有帮助!