Inheritance salesforce Apex是否支持静态方法的继承?

Inheritance salesforce Apex是否支持静态方法的继承?,inheritance,static,salesforce,apex-code,Inheritance,Static,Salesforce,Apex Code,当我打电话时 public virtual class parent { public static void doStuff(){system.debug('stuff');} } public class child extends parent{} 我得到以下错误:方法不存在或签名不正确:child.doStuff() 静态方法不是在salesforce中继承的,还是我做错了什么?Apex在这方面与Java是一致的。静态不是继承的 实际上,根据这里的答案:virtual只能在

当我打电话时

public virtual class parent {
    public static void doStuff(){system.debug('stuff');} 
}

public class child extends parent{}
我得到以下错误:方法不存在或签名不正确:child.doStuff()


静态方法不是在salesforce中继承的,还是我做错了什么?

Apex在这方面与Java是一致的。静态不是继承的

实际上,根据这里的答案:
virtual
只能在方法上使用。virtual不仅可以在类上使用,而且必须在继承类时使用。不,这并不意味着每种方法都必须实现。“Virtual”应用于方法时表示可以重写该方法。当应用于类时,“虚拟”意味着它可以从中继承。我认为这个问题与vtable无关。我认为这是关于父类的公共静态方法使用子类名字对象不可见的问题。在OOP理论中,示例应该可以工作,编译器应该在拒绝方法名之前咨询父类。@mmix,这似乎是对的,我认为您已经了解了一些东西。但为什么它不可见,你知道吗?好吧,apex是salesforce的java类语言,但它不是java。它的许多行为并不是由语言的可能性来定义的,而是由salesforce产品经理人为施加的限制来定义的。我相信他们会有一个解释,但我猜他们会告诉你只使用parent.doStuff():)听到这个消息我很惊讶,所以我在网上四处看了看,我发现你在技术上是对的-他们在严格意义上不是“遗传的”(没有多态性)。但我仍然认为我的示例可以在Java中使用。我没有一个Java环境来尝试它,但这里有一个类似的例子,请参阅对它的评论,我认为人们认为“继承的”mena的不同导致了这种混乱。这可能也是导致apex设计混乱的原因。广义地说,继承意味着重用父对象,所以OOP理论中没有任何东西阻止child.doStuff()。我不是Java专家,但如果我没记错的话,child.doStuff(0)可以在Java中工作是的,我现在意识到使用“继承”这个词是geekbait在我的问题标题中!今天学到了一些东西!尽管如此,我的示例似乎可以在Java中工作,但在Apex中却不行。哦,好吧。@naomi,静态方法在任何OOp语言中都不能以多态方式继承。静态方法相当于无C语言的函数,它们的地址不能通过vtable解析。@naomi,您的示例可以在Java中工作,但它的缺点是这是一种不好的做法。你应该通过类而不是实例来访问静态。它还会产生编译器警告。
child.doStuff();