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

public class child extends parent{} 

Kiedy zadzwonićCzy salesforce Apex obsługuje dziedziczenie metod statycznych?

child.doStuff(); 

otrzymuję ten błąd: Metoda nie istnieje lub nieprawidłowy podpis: child.doStuff()

Czy metody statyczne nie odziedziczone w Salesforce czy robię coś źle ?

+0

Właściwie, zgodnie z odpowiedzią tutaj: http://stackoverflow.com/questions/5316705/overriding-properties-from-abstract-class-in-salesforce-apex 'virtual' może być użyty tylko na metodach. –

+4

Wirtualny nie tylko MOŻE być stosowany na zajęciach, ale musi być, jeśli klasa zostanie odziedziczona. I nie, nie oznacza to, że każda metoda musi zostać wdrożona. "Wirtualny" po zastosowaniu do metody oznacza, że ​​metoda MOŻE zostać nadpisana. A "wirtualny" po zastosowaniu do klasy oznacza, że ​​można ją odziedziczyć. – naomi

+1

Myślę, że problem nie jest związany z vtable. Myślę, że chodzi o to, że publiczna statyczna metoda klasy nadrzędnej nie jest widoczna przy użyciu pseudonimu klasy potomnej. W teorii OOP próbka powinna działać, a kompilator powinien zapoznać się z klasą nadrzędną przed odrzuceniem nazwy metody. – mmix

Odpowiedz

6

Apex jest zgodny z Javą w tym zakresie. Statyka nie jest dziedziczona.

+0

Byłem zaskoczony, słysząc to, więc rozejrzałem się po Internecie i widzę, że masz rację techniczną - nie są "dziedziczeni" w ścisłym tego słowa znaczeniu (bez polimorfizmu). Ale nadal uważam, że mój przykład będzie działał w Javie. Nie mam środowiska Java do wypróbowania go, ale tutaj jest podobny przykład, zobacz komentarze na ten temat http://stackoverflow.com/questions/1740528/inheritance-vs-static-in-java#1740662 – naomi

+0

I pomyślcie, że różnice w tym, co ludzie przyjmują "odziedziczone" meny, powodują to zamieszanie. Być może to właśnie spowodowało zamieszanie związane z projektowaniem wierzchołków. W najszerszym znaczeniu dziedziczenie oznacza ponowne użycie rodzica, więc w teorii OOP nic nie stoi na przeszkodzie child.doStuff(). Nie jestem ekspertem od Javy, ale jeśli dobrze pamiętam, child.doStuff (0 działałoby w Javie – mmix

+0

Tak, teraz rozumiem, że to geekbait użył słowa "dziedziczenie" w tytule mojego pytania! wygląda na to, że mój przykład działałby w Javie, ale nie w Apexie. No cóż, – naomi

Powiązane problemy