2012-02-15 18 views
7
public virtual class parent { 
    public static void doStuff(){system.debug('stuff');} 
} 

public class child extends parent{} 

Quando chiamoSalesex Apex supporta l'ereditarietà dei metodi statici?

child.doStuff(); 

ottengo questo errore: Metodo non esiste o firma non corretta: child.doStuff()

sono metodi statici non ereditati in Salesforce o sto facendo qualcosa di sbagliato ?

+0

In realtà, in base alla risposta qui: http://stackoverflow.com/questions/5316705/overriding-properties-from-abstract-class-in-salesforce-apex 'virtual' può essere utilizzato solo sui metodi. –

+4

Non solo virtuale può essere utilizzato sulle classi, ma deve essere se la classe verrà ereditata da. E no, non significa che ogni metodo deve essere implementato. "Virtuale" quando applicato a un metodo significa che il metodo PUO essere sovrascritto. E "virtuale" quando applicato a una classe significa che può essere ereditato da. – naomi

+1

Penso che il problema non sia relativo. Penso che questo riguardi il metodo statico pubblico della classe genitore che non è visibile usando il moniker della classe figlio. Nella teoria OOP l'esempio dovrebbe funzionare e il compilatore dovrebbe consultare la classe genitore prima di rifiutare il nome del metodo. – mmix

risposta

6

L'Apex è coerente con Java su questo. La statica non è ereditata.

+0

Sono stato sorpreso di sentire questo, quindi mi sono guardato in giro online e vedo che hai ragione tecnicamente - non sono "ereditati" in senso stretto (nessun polimorfismo). Ma continuo a pensare che il mio esempio funzionerebbe in Java. Non ho un ambiente Java per provarlo, ma qui è un esempio simile, vedere i commenti su di esso http://stackoverflow.com/questions/1740528/inheritance-vs-static-in-java#1740662 – naomi

+0

I Pensare alle differenze in ciò che la gente assume "ereditata" causa questa confusione. Forse è ciò che ha confuso la confusione con il design dell'apice. In termini generali l'ereditarietà significa riutilizzo del genitore, quindi non c'è nulla nella teoria dell'OOP che impedisca child.doStuff(). Non sono un esperto di Java, ma se ricordo male, child.doStuff (0 funzionerebbe in Java – mmix

+0

Sì, mi rendo conto ora che era geekbait usare la parola "ereditarietà" nel titolo della mia domanda! Ho imparato qualcosa oggi! sembra che il mio esempio possa funzionare in Java, ma non in Apex. Oh beh – naomi