2012-09-28 12 views
16

In Java ist es sicher, dass getClass() in einem Konstruktor einen als Basisklasse verwendete Klasse namens anzunehmen, Informationen über die abgeleitete Klasse zur Verfügung stellen, anstatt der Klasse der Basisklasse?Welche Klasse hat getClass() Bericht in einem Konstruktor einer Basisklasse

Es scheint zu funktionieren, aber ich denke, dass nicht notwendigerweise bedeutet, es ist sicher. Zum Beispiel, wenn ich die folgenden zwei Klassen:

public class Parent { 
    public Parent() { 
     System.out.println(getClass().getName()); 
    } 
} 

Und:

public class Derived extends Parent { 
    public Derived() { 
     super(); 
    } 

    public static void main(String... args) { 
     new Derived(); 
    } 
} 

Wenn ich die main() Methode in der abgeleiteten Klasse laufen druckt: Derived (das ist, was ich hatte gehofft) . Aber kann ich mich auf dieses Verhalten in JVMs verlassen?

+1

ich es für die Anmeldung Zweck verwenden würde .. –

+0

von Java-doc-APIs ** Gibt die Laufzeitklasse eines Objekts. Dieses Klassenobjekt ist das Objekt, das durch statische synchronisierte Methoden der dargestellten Klasse gesperrt wird. ** – user1406062

+0

Ob es "sicher" ist oder nicht, ich würde sagen, das hängt sehr davon ab, was Sie damit machen wollen. Nennst du wirklich nur den Namen? Das scheint auf lange Sicht nicht besonders nützlich zu sein, aber ja, das wird "sicher" sein und den tatsächlichen Klassennamen ausgeben, der zur Laufzeit instanziiert wird. – jrajav

Antwort

13

getClass eines von Object ‚s Methoden and returns the runtime class of this:

Gibt die Laufzeitklasse dieses Objekts. Das zurückgegebene Klassenobjekt ist das Objekt, das durch statische synchronisierte Methoden der dargestellten Klasse gesperrt ist.

Also ja, es wird immer Derived zurückgeben.

Verwandte Themen