Pregunta

Por qué no puedo especificar el tipo estático de métodos en la interfaz.

¿Hay alguna alternativa para hacer esto?

pero debería usar solo inerface insted de abstract class.

/

¿Hay algún problema en la especificación del especificador de acceso en la interfaz?

Quiero especificar los eventos en la interfaz y eso solo debería ser accedido por la clase implementada, así que quiero un especificador de acceso protegido para ese evento.

y tengo cierta función que puede hacer uso de la interfaz en otra clase, en ese caso puedo usar un especificador de acceso público.

¿Fue útil?

Solución

No sé qué idioma está utilizando, pero responderé como si estuviera en C #.

Por qué no puedo especificar el tipo estático de métodos en la interfaz. ¿Hay alguna alternativa para hacer esto?

Se debe a que no se pueden anular los métodos estáticos. ¿Qué estás tratando de lograr?

Los miembros en interfaces siempre son públicos en C #. Si necesita tener otros niveles de protección, use una clase abstracta. ¿Cuál sería el propósito de los eventos protegidos si no puede acceder a ellos desde la interfaz? Entonces no tiene nada que ver con la interfaz (recuerde, la interfaz no puede tener ningún código). Si se está refiriendo a que solo las clases de implementación pueden elevar los eventos, tenga la seguridad de que son los únicos que pueden hacerlo. Los eventos se crean de esa manera: solo la clase en sí puede generar eventos. No puede generar un evento externo a la clase (excepto si tiene un método en la clase, elevar el evento).

Otros consejos

las interfaces solo describen su implementador al público. El único modificador de acceso para una interfaz es " interno " en la propia interfaz, lo que la convierte en una interfaz solo visible para todos los miembros del mismo ensamblaje o los conocidos con el " InternalsVisibleTo " atributo.

Si solo los implementadores deberían ver un determinado evento, entonces ese evento tendría que ser en algún tipo de clase base.

Un método estático es prácticamente un remanente de la programación de procedimientos. tienen su uso (ver, por ejemplo, los métodos de extensión) pero realmente no tienen mucho que ver con la POO.

No entiendo lo que quieres decir con la primera pregunta, pero tu segunda pregunta sobre el uso de las interfaces protegidas es sencillamente " no " Las interfaces se denominan " interfaces " porque especifican la " interfaz " (es decir, métodos públicos) en los que puede comunicarse con ese objeto.

Mi experiencia con OOP está relacionada con Actionscript 3, pero estoy seguro de que es relativa.

Los métodos estáticos no se pueden sobrescribir y no se utilizan cuando una clase amplía la clase ancestro.

Los modificadores de acceso no se usan en la interfaz porque la interfaz se usa para configurar métodos PÚBLICOS.

En AS3, una interfaz es simplemente una firma de método sin bloque, pero que incluye tipos de datos.

Es importante tener en cuenta que las firmas del método getter / setter también se pueden usar en una interfaz. Son útiles y si solo usas un configurador, has creado un acceso público de solo lectura a una variable encapsulada privada.

En cuanto a la interfaz en lugar de una clase abstracta, todo depende de cómo desea implementar su código. A menudo, los tiempos y la interfaz y una clase abstracta se usan juntos para lograr diferentes resultados utilizando la herencia y el polimorfismo (ampliaciones / implementos).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top