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

public class child extends parent{} 

Когда я звонюПоддерживает ли salesforce Apex наследование статических методов?

child.doStuff(); 

Я получаю эту ошибку: Метод не существует или неверно подпись: child.doStuff()

ли статические методы не наследуются отдела продаж или я делаю что-то неправильно ?

+0

Собственно, в соответствии с ответом здесь: http://stackoverflow.com/questions/5316705/overriding-properties-from-abstract-class-in-salesforce-apex 'virtual' можно использовать только для методов. –

+4

Виртуальный не только МОЖЕТ использоваться на классах, но должен быть, если класс наследуется. И нет, это не означает, что каждый метод должен быть реализован. «Виртуальный» при применении к методу означает, что метод CAN может быть переопределен. И «виртуальный» при применении к классу означает, что он может быть унаследован. – naomi

+1

Я думаю, что проблема не связана с vtable. Я думаю, что речь идет о публичном статическом методе родительского класса, который не отображается с помощью прошивки дочернего класса. В теории ООП образец должен работать, и компилятор должен обратиться к родительскому классу, прежде чем отклонять имя метода. – mmix

ответ

6

Apex соответствует Java на этом. Статика не наследуется.

+0

Я был удивлен, услышав это, поэтому я посмотрел в Интернете, и я вижу, что вы технически правы - они не «унаследованы» в строгом смысле (без полиморфизма). Но я все еще думаю, что мой пример будет работать на Java. У меня нет среды Java, чтобы попробовать ее, но вот аналогичный пример, см. Комментарии к ней http://stackoverflow.com/questions/1740528/inheritance-vs-static-in-java#1740662 – naomi

+0

I думаю, что различия в том, что люди считают «унаследованной» менной причиной этой путаницы. Возможно, это вызвало путаницу с дизайном апекса. В самом широком смысле наследование означает повторное использование родителя, поэтому в теории ООП нет ничего, что предотвращало бы child.doStuff(). Я не эксперт по Java, но если я правильно помню, child.doStuff (0 будет работать на Java – mmix

+0

Да, теперь я понимаю, что geekbait использовал слово «наследование» в моем вопросе, и узнал что-то сегодня! кажется, что мой пример будет работать на Java, но не работает в Apex. Ну, ну, – naomi

Смежные вопросы