如何使用一个对象访问所有子方法?

时间:2016-05-14 10:54:22

标签: java inheritance method-overriding

我有一个问题: 我们可以使用向下转换从子类访问所有方法 考虑以下代码 基类:

public class BaseClass {

    public void method() {
        System.out.println("Base class");
    }
}

ChildOne:

public class ChildOne extends BaseClass {
    @Override
    public void method() {
        System.out.println("inside ChildOne");
    }
}

ChildTwo:

public class ChildTwo extends BaseClass {

    @Override
    public void method() {
        System.out.println("inside ChildTwo");
    }
}

客户端类

try {
    List l = new ArrayList();
    l.add(new BaseClass());
    l.add(new ChildOne());
    l.add(new ChildTwo());

    for (Object o : l) {
        BaseClass bc = (BaseClass) Class.forName(o.getClass().getName().toString()).newInstance();
        bc.method();
    }
} catch (Exception e) {

}

outPut :

Base class
inside ChildOne
inside ChildTwo

现在问题是

public abstract class BaseClass {

        public abstract void method(); 
    }

因为我们无法创建任何接口或抽象类的对象。 在上面的代码中,我能够访问所有类的所有方法。 考虑我们使用方法定义命名BaseClass的接口,因为我现在在许多类中实现该接口,问题是如何在不创建每个类的特定实例的情况下访问所有方法 我想在单循环中执行此操作,但继承不会允许我们 怎么做?

1 个答案:

答案 0 :(得分:2)

您需要使用包含泛型类型(BaseClass)的列表:List<BaseClass> l = new ArrayList<>();

多态性在起作用,循环看起来像:

for (BaseClass o : l) o.method();