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

标签 java inheritance overriding

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

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");
    }
}

child 二:

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(); 
    }

因为我们无法创建接口(interface)或抽象类的对象。 在上面的代码中,我可以访问所有类的所有方法。 考虑我们有一个名为 BaseClass 的接口(interface),它带有方法定义,就像我一样,我正在许多类中实现该接口(interface),现在的问题是如何在不创建每个类的特定实例的情况下访问所有方法 我想在单循环中做到这一点但继承不允许我们 如何做到这一点?

最佳答案

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

多态性正在发挥作用,循环将如下所示:

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

关于java - 如何使用一个对象访问所有子方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37225745/

相关文章:

java - 什么是运算符重载,它与多态性有什么不同?

java - 在java中计算句子中每个单词的频率

java - 内部类究竟是如何访问外部类中的元素的?

Java:继承和重写方法问题

java - Spring 启动时配置文件 : javax. sql.DataSource' 无法找到

java - 打印所有非零数字按升序排列的数字

java - 抽象方法实现与抽象方法覆盖。这两个对于抽象类意味着相同吗?

Python继承-对象没有属性错误

c - 使用 LD_PRELOAD 覆盖连接调用

polymorphism - 覆盖与多态