2009-07-23 24 views
5

En Actionscript 3 no puedo declarar vars en Interfaces. No lo entiendo Sé que puedo solucionar esto definiendo getters y setters, pero ¿qué ocurre si solo quiero una propiedad pública simple? Usualmente uso getters y setters si hay algo que hacer cuando establezco u obtengo una propiedad, pero ¿qué ocurre si solo quiero almacenar un valor?Por qué las propiedades no son declarables en las interfaces

Respuesta

0

No soy una programación de actioscript, pero las interfaces (en java por ejemplo) están destinadas a definir el comportamiento no el estado, por lo que las intrerfaces en jave simplemente declaran los métodos que la clase que implementa la interfaz necesita definir. Las propiedades (o variable de instancia) no son en general necesarias para definir el comportamiento y no están permitidas en las interfaces.

+0

Las propiedades no son las mismas que las variables de instancia. –

+1

+1 en eso ... en principio ... porque esto no es realmente válido para AS3 ... hay una distinción entre las propiedades (proporcionadas por los usuarios) y las variables ... desde el exterior esto es completamente transparente, siendo IDÉNTICO a nivel sintáctico ... pero el acceso a la propiedad efectivamente significa una llamada y el acceso variable no ... las interfaces pueden declarar acceso de propiedad, pero no variables ... esto no es 100% consistente ni razonable ... pero así es la vida, supongo ... :) – back2dos

2

Puede decirlo así: las interfaces existen porque en su idioma no puede heredar de múltiples clases base abstractas. Si AS3 te hubiera permitido hacer eso, probablemente no tendría 'interfaces', sino 'clases abstractas puras'.

En otras palabras, tener las propiedades implementación en su interfaz conduciría a conflictos de nombres y de allí a otros problemas de herencia múltiple (diamante).

Sin embargo, tener un getter o setter sin implementación debería funcionar.

public interface I { function get A():int; } 

(no tengo el compilador AS3 a mano)

+1

su respuesta es la solución correcta ... aunque estoy totalmente en desacuerdo sobre lo que está diciendo acerca de las interfaces ... la herencia es inherentemente mala ...: D ... no, en serio ... el punto de La herencia es CÓDIGO REUTILIZAR ... pero generalmente se usa mal para lograr para qué están diseñadas las interfaces: describir una función de objetos ... regla de oro: las clases definen la implementación, el comportamiento de las interfaces ... no usan clases para exigir un comportamiento ... no escriba algoMétodo (algoPa ram: SomeClass), escriba someMethod (someParam: SomeInterface) ... esto es mucho más flexible/extensible y más limpio ... – back2dos

+0

Traté de evitar hacer una afirmación acerca de si la herencia múltiple era buena o mala :) Solo señalé que si tiene implementación de propiedades en estas 'interfaces', se requeriría un mecanismo similar a la herencia múltiple cuando el compilador encuentre 2 interfaces con la misma propiedad definida. – Vlagged

Cuestiones relacionadas