2017-04-15 11 views
1

私は4つの異なるクラスA、クラスB、クラスC、クラスDを持っています。これらのクラスはすべて、同じ名前のメソッドabc()を持っています。 他のクラスの他のすべてのメソッドを自動的に呼び出すメインメソッドのクラスを1つだけ宣言するにはどうすればよいですか?クラスを1つだけ呼び出すことで、同じメソッドで4つ以上の異なるクラスを呼び出す方法はありますか?

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


    } 

} 
+1

ソクラテスのアプローチを取る:コードで一緒にグループ化するアクションのグループがある場合は、どうしますか? –

+1

インターフェイスとコレクションを使用して見てください。 – OldProgrammer

+0

私はあなたが何をしようとしているのか理解できません。なぜですか? 'D'は' C'を呼び出し、 'C'は' B'などを起動しますか? – c0der

答えて

1

私はインターフェイスがこれに役立つと信じています。詳細はthisをご覧ください。

+0

これはコメントでなければなりません –

+0

当時はコメントできませんでした。笑 – MonkeyWithMachine

1

メソッド "abc"は、staticキーワードでは宣言されていません。 abcメソッドを呼び出すには、A、B、C、D(おそらくanonymously)のインスタンスをインスタンス化する必要があります。

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

    } 

} 
関連する問題