猿问

如何在我创建 ArrayList<SuperclassName> 的另一个类中使用超类的子类的方法?

如何在我创建 ArrayList 的另一个类中使用超类的子类的方法?

我在另一个类中创建了一个超类的 ArrayList。这个超类有三个子类,每个子类都有自己的方法。我如何使用这些方法?

而且,我怎样才能使用这些子类的实例变量?


HUWWW
浏览 172回答 2
2回答

BIG阳

因为您使用超类的名称作为泛型类型,所以您使用的是超类在 ArrayList 中提供的接口。您可以将子类类型添加到列表中,但是如果不首先检查对象是哪个子类,然后对子类进行强制转换,就不能安全地使用子类中引入的唯一方法。这是一个例子:public class A {&nbsp; &nbsp; public void methodFromA() {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("From class A");&nbsp; &nbsp; }}public class B extends A {&nbsp; &nbsp; public void methodFromB() {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("From class B");&nbsp; &nbsp; }}public class C extends A {&nbsp; &nbsp; public void methodFromC() {&nbsp; &nbsp; &nbsp; &nbsp; System.out.println("From class C");&nbsp; &nbsp; }}以下是这些正在使用的类,使用具有超类类型的 ArrayList:public static void main(String[] args) {&nbsp; &nbsp; List<A> myList = new ArrayList<>();&nbsp; &nbsp; A object1 = new A();&nbsp; &nbsp; B object2 = new B();&nbsp; &nbsp; C object3 = new C();&nbsp; &nbsp; myList.add(object1);&nbsp; &nbsp; myList.add(object2);&nbsp; &nbsp; myList.add(object3);&nbsp; &nbsp; for (A object : myList) {&nbsp; &nbsp; &nbsp; &nbsp; object.methodFromA();&nbsp; &nbsp; &nbsp; &nbsp; if (object instanceof B) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; B castedObject = (B) object;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; castedObject.methodFromB();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else if (object instanceof C) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C castedObject = (C) object;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; castedObject.methodFromC();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }}结果输出:From class AFrom class AFrom class BFrom class AFrom class C至于使用实例变量,它们应该由公共 getter 和 setter 访问,在检查和转换后使用,如上所示。

白板的微信

首先,如果您无法调用将反映到具体子类的超类方法,则意味着您的设计不好,您应该再做一次。但是,无论如何,您都可以从 arraylist 中获取项目并使用以下命令进行检查instanceof:if (item instanceof FirstSubClass){&nbsp; &nbsp;FirstSubClass f = (FirstSubClass) item;&nbsp; &nbsp;f.methodInFirst();} else if (...)&nbsp; &nbsp;.....
随时随地看视频慕课网APP

相关分类

Java
我要回答