2012-09-28 15 views
16

In Java, è sicuro assumere che getClass() chiamato all'interno di un costruttore di una classe utilizzata come classe base fornirà informazioni sulla classe derivata, anziché sul classe della classe base?Quale classe fa getClass() segnala all'interno di un costruttore di una classe base

Sembra funzionare, ma suppongo che non significhi necessariamente che sia sicuro. Per esempio, se ho le seguenti due classi:

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

E:

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

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

Quando eseguo il metodo main() nella classe derivata la stampa: Derived (che è quello che speravo) . Ma posso fare affidamento su questo comportamento su JVM?

+1

Lo userei per scopi di registrazione .. –

+0

da API java doc, ** Restituisce la classe di runtime di un oggetto. Quell'oggetto Class è l'oggetto che è bloccato dai metodi statici sincronizzati della classe rappresentata. ** – user1406062

+0

Se è "sicuro" o meno, direi che dipende molto da ciò che pensi di fare con esso. Stai davvero registrando il nome? Ciò non sembra molto utile a lungo termine, ma sì, sarà "sicuro" e stamperà il nome effettivo della classe istanziato in fase di runtime. – jrajav

risposta

13

getClass è uno dei metodi and returns the runtime class of thisObject s':

restituisce la classe runtime di questo oggetto. L'oggetto Class restituito è l'oggetto che è bloccato dai metodi statici sincronizzati della classe rappresentata.

Quindi sì, restituirà sempre Derived.

Problemi correlati