如何通过仅调用一个类来使用相同的方法调用四个或四个以上的不同类?

时间:2017-04-15 15:41:53

标签: java

所以我有四个不同的类A类,B类,C类和D类,所有这些类都有一个同名的方法abc(); 如何在main方法中只声明一个应该自动调用其他类中所有其他方法的类?

class A
{
    void abc()
    {
        System.out.println("A");
    }
}
class B
{
    void  abc()
    {
        System.out.println("B");
    }
}
class C
{
    void abc()
    {
        System.out.println("C");
    }
}
class D
{
    void abc()
    {
        System.out.println("D");
    }
}

public class Testing {

    public static void main(String[] args) {

        D obj3 = new D();


    }

}

2 个答案:

答案 0 :(得分:1)

我相信界面会对此有所帮助,请查看this以获取有关此主题的更多帮助。

答案 1 :(得分:1)

方法" abc"不使用static关键字声明。您必须实例化A,B,C和D的实例(可能anonymously)以调用abc方法。

你可以使用Reflection来解决这个问题,但我并不是真的推荐它。

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

class A
{
    void abc()
    {
        System.out.println("A");
    }
}
class B
{
    void  abc()
    {
        System.out.println("B");
    }
}
class C
{
    void abc()
    {
        System.out.println("C");
    }
}
class D
{
    void abc()
    {
        System.out.println("D");
    }
}

public class Testing {

    public static void main(String[] args) throws InstantiationException, IllegalAccessException, NoSuchMethodException, IllegalArgumentException, InvocationTargetException {

    Class classes[] = { A.class, B.class, C.class, D.class };

        for (Class c : classes) {
            Object x = c.newInstance();
            Method abc = c.getDeclaredMethod("abc");
            abc.invoke(x);
        }

    }

}

更简单的方法是使用界面。仍然使用一点点反射,它可能看起来像这样:

interface Abc {
    void abc();
}
class A implements Abc
{
    @Override
    public void abc()
    {
        System.out.println("A");
    }
}
class B implements Abc
{
    @Override
    public void  abc()
    {
        System.out.println("B");
    }
}
class C implements Abc
{
    @Override
    public void abc()
    {
        System.out.println("C");
    }
}
class D implements Abc
{
    @Override
    public void abc()
    {
        System.out.println("D");
    }
}

public class Testing {
    public static void main(String[] args) throws InstantiationException, IllegalAccessException {

    Class classes[] = { A.class, B.class, C.class, D.class };

        for (Class c : classes) {
            Abc x = (Abc) c.newInstance();
            x.abc();
        }

    }

}