繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM