2016-09-14 4 views
-2

Ich habe ein MySuperClass, MySubClass und Main KlassenWie ruft man eine Superklassenmethode für ein Unterklassenobjekt auf?

MySuperClass.java

public abstract MySuperClass { 
    String param; 

    public String getParam() { 
     return param;     
    } 
} 

MySubClass.java

public class MySubClass extends MySuperClass { 
} 

Main.java

public <T extends MySuperClass> void doWork (Class <T> subClassObject) { 
    subClassObject.getParam(); // method undefined 
} 

Warum? Ich habe T extends MySuperClass angegeben. Also sollte alle MySuperClass Methode für die Unterklasse funktionieren. Wie man die Methode einer Oberklasse von einem Unterklassenobjekt aufruft?

+3

Wollen Sie die Parameter ein 'Klasse ' oder 'T' zu sein? Das sind sehr unterschiedliche Dinge. – resueman

+0

Sie verwechseln eine Klasse mit einer Instanz dieser Klasse. Sie können die Methode nur für eine 'Class' in' Class' aufrufen. –

+0

Ich habe gerade 'T' probiert und es hat funktioniert. Ich weiß nicht den Unterschied zwischen T und T' – john

Antwort

4

subClassObject ist keine MySuperClass Instanz, es ist eine java.lang.Class Instanz. Sie sollten diesen Parameter als T, nicht als Class<T> definieren das Verhalten, die Sie wollen:

public <T extends MySuperClass> void doWork (T subClassObject) { 
    subClassObject.getParam(); 
    // etc... 
} 
+0

Die Generika sind eigentlich unnötig und das OP sollte nur die Methode deklarieren als 'öffentliche void doWork (MySuperClass subClassObject)' – newacct

+0

@newacct wow, komplett falsch gelesen, dass aus irgendeinem Grund. Tunnelblick von Art ;-) Ich werde meinen irreführenden Kommentar entfernen. – Mureinik

Verwandte Themen