[英]How to use the methods of a subclass of a superclass in another class in which I created a ArrayList<SuperclassName>?
如何在创建ArrayList的另一个类中使用超类的子类的方法?
我在另一个类中创建了一个超类的ArrayList。 该超类具有三个子类,每个子类都有自己的方法。 如何使用这些方法?
而且,如何使用这些子类的实例变量?
因为您使用超类的名称作为泛型类型,所以您使用的是超类在ArrayList中提供的接口。
您可以将子类类型添加到列表中,但是如果不先检查对象是哪个子类,然后强制转换为子类,就不能安全地使用子类中引入的唯一方法。
这是一个例子:
public class A {
public void methodFromA() {
System.out.println("From class A");
}
}
public class B extends A {
public void methodFromB() {
System.out.println("From class B");
}
}
public class C extends A {
public void methodFromC() {
System.out.println("From class C");
}
}
这些是使用超类类型的ArrayList的这些类:
public static void main(String[] args) {
List<A> myList = new ArrayList<>();
A object1 = new A();
B object2 = new B();
C object3 = new C();
myList.add(object1);
myList.add(object2);
myList.add(object3);
for (A object : myList) {
object.methodFromA();
if (object instanceof B) {
B castedObject = (B) object;
castedObject.methodFromB();
}
else if (object instanceof C) {
C castedObject = (C) object;
castedObject.methodFromC();
}
}
}
结果输出:
From class A
From class A
From class B
From class A
From class C
至于使用实例变量,应该由公共获取器和设置器访问它们,在检查和强制转换之后使用它们,如上所示。
首先,如果您不能调用将反映到具体子类的超类方法,则意味着您的设计不好,您应该重新进行处理。
但是,无论如何,您都可以从arraylist中获取项目并使用instanceof
检查, instanceof
:
if (item instanceof FirstSubClass){
FirstSubClass f = (FirstSubClass) item;
f.methodInFirst();
} else if (...)
.....
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.