我有一个问题: 我们可以使用向下转换从子类访问所有方法 考虑以下代码 基类:
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
的接口,因为我现在在许多类中实现该接口,问题是如何在不创建每个类的特定实例的情况下访问所有方法
我想在单循环中执行此操作,但继承不会允许我们
怎么做?
答案 0 :(得分:2)
您需要使用包含泛型类型(BaseClass
)的列表:List<BaseClass> l = new ArrayList<>();
多态性在起作用,循环看起来像:
for (BaseClass o : l) o.method();