所以我有四个不同的类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();
}
}
答案 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();
}
}
}