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

public class child extends parent{} 

Cuando llamo¿Admite Salesforce Apex la herencia de métodos estáticos?

child.doStuff(); 

consigo este error: Método no existe o firma incorrecta: child.doStuff()

son métodos estáticos no hereditarios en la fuerza de ventas o estoy haciendo algo mal ?

+0

En realidad, de acuerdo con la respuesta aquí: http://stackoverflow.com/questions/5316705/overriding-properties-from-abstract-class-in-salesforce-apex 'virtual' solo se puede utilizar en métodos. –

+4

Virtual no solo se puede usar en clases, sino que TIENE que ser si la clase va a ser heredada. Y no, no significa que todos los métodos deben ser implementados. "Virtual" cuando se aplica a un método significa que el método puede anularse. Y "virtual" cuando se aplica a una clase significa que se puede heredar de. – naomi

+1

Creo que el problema no está relacionado con vtable. Creo que esto se trata de que el método público estático de la clase principal no sea visible utilizando el apodo de clase infantil. En la teoría OOP, la muestra debería funcionar y el compilador debería consultar la clase padre antes de rechazar el nombre del método. – mmix

Respuesta

6

Apex es consistente con Java en esto. La estática no es heredada.

+0

Me sorprendió escuchar esto, así que miré en línea y veo que técnicamente estás en lo correcto: no son "heredados" en un sentido estricto (no tienen polimorfismo). Pero todavía creo que mi ejemplo funcionaría en Java. No tengo un entorno Java para probarlo, pero aquí hay un ejemplo similar, vea los comentarios en él http://stackoverflow.com/questions/1740528/inheritance-vs-static-in-java#1740662 – naomi

+0

I Pienso que las diferencias en lo que las personas asumen son "heredadas" y causan esta confusión. Es quizás lo que causó la confusión con el diseño Apex también. En términos más amplios, la herencia significa la reutilización de los padres, por lo que no hay nada en la teoría OOP que impida child.doStuff(). No soy un experto en Java, pero si mal no recuerdo, child.doStuff (0 funcionaría en Java – mmix

+0

Sí, ahora me doy cuenta de que era geekbait usar la palabra "herencia" en el título de mi pregunta. ¡Hoy he aprendido algo! parece que mi ejemplo funcionaría en Java, pero no en Apex. Oh bien. – naomi

Cuestiones relacionadas