2017-04-15 3 views
1

Also habe ich vier verschiedene Klassen Klasse A, Klasse B, Klasse C und Klasse D, alle diese Klassen haben eine Methode mit dem gleichen Namen abc(); Wie deklariere ich nur eine Klasse in der Hauptmethode, die automatisch alle anderen Methoden in den anderen Klassen aufrufen soll?Wie vier oder mehr als vier verschiedene Klassen mit derselben Methode aufgerufen werden, indem nur eine Klasse aufgerufen wird?

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

Einen sokratischen Ansatz: Wenn Sie eine Gruppe von Aktionen haben, die Sie in Code zusammen gruppieren möchten, wie machst du das? –

+1

Verwenden Sie eine Schnittstelle und eine Sammlung. – OldProgrammer

+0

Ich verstehe nicht, was Sie versuchen (und warum). Möchtest du mit 'D'' C' und 'C' mit' B' usw. aufrufen? – c0der

Antwort

1

Ich glaube, eine Schnittstelle würde dabei helfen, schauen Sie sich this für weitere Hilfe zu diesem Thema.

+0

Dies sollte ein Kommentar sein –

+0

Ich konnte zu der Zeit nicht kommentieren, daher mein Niveau. lol – MonkeyWithMachine

1

Die Methoden "abc" sind nicht mit dem Schlüsselwort static deklariert. Sie müssen eine Instanz von A, B, C und D instanziieren (vielleicht anonymously), um die abc-Methode aufzurufen.

Sie können Reflection verwenden, um darüber zu kommen, aber ich kann es nicht wirklich empfehlen.

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

    } 

} 

Je einfacher Weg, um darüber zu bekommen, ist eine Schnittstelle zu verwenden. Immer noch mit ein wenig Reflexion, könnte es so aussehen:

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

    } 

} 
Verwandte Themen