如何使用一个 object 访问所有 child 方法?
How to access all child methods using one single object?
我有一个问题:
我们可以使用向下转换从 child class 访问所有方法
考虑以下代码
基数 Class :
public class BaseClass {
public void method() {
System.out.println("Base class");
}
}
第一个孩子:
public class ChildOne extends BaseClass {
@Override
public void method() {
System.out.println("inside ChildOne");
}
}
二孩:
public class ChildTwo extends BaseClass {
@Override
public void method() {
System.out.println("inside ChildTwo");
}
}
和客户class
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();
}
因为我们无法创建接口或抽象 class 的 object。
在上面的代码中,我能够访问所有 classes 中的所有方法。
考虑到我们有一个名为 BaseClass
的接口和方法定义,因为我正在许多 classes 中实现该接口现在的问题是我如何在不创建每个 [=35] 的特定实例的情况下访问所有方法=]
我想在单循环中做到这一点但是继承不允许我们这样做
怎么做?
您需要使用泛型列表 (BaseClass
):List<BaseClass> l = new ArrayList<>();
多态性在起作用,循环看起来像:
for (BaseClass o : l) o.method();
我有一个问题: 我们可以使用向下转换从 child class 访问所有方法 考虑以下代码 基数 Class :
public class BaseClass {
public void method() {
System.out.println("Base class");
}
}
第一个孩子:
public class ChildOne extends BaseClass {
@Override
public void method() {
System.out.println("inside ChildOne");
}
}
二孩:
public class ChildTwo extends BaseClass {
@Override
public void method() {
System.out.println("inside ChildTwo");
}
}
和客户class
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();
}
因为我们无法创建接口或抽象 class 的 object。
在上面的代码中,我能够访问所有 classes 中的所有方法。
考虑到我们有一个名为 BaseClass
的接口和方法定义,因为我正在许多 classes 中实现该接口现在的问题是我如何在不创建每个 [=35] 的特定实例的情况下访问所有方法=]
我想在单循环中做到这一点但是继承不允许我们这样做
怎么做?
您需要使用泛型列表 (BaseClass
):List<BaseClass> l = new ArrayList<>();
多态性在起作用,循环看起来像:
for (BaseClass o : l) o.method();