¿Hay alguna razón legítima para llamar a la versión de clase base de un método diferente?

Tengo un espectro de respuestas:

  1. Mi primer pensamiento fue que nunca había pensado en hacer esto, por lo que debe ser fundamentalmente incorrecto 😉
  2. Mi segundo pensamiento fue que he usado super.sameMethod() con suficiente frecuencia, por lo que debe estar bien o incluso hay un problema al hacerlo.
  3. Quizás, la distinción es que hay un orden de magnitud más cohesión entre un método de anulación y su padre que entre un método de subclase aleatorio y otro método de superclase …
  4. … lo que me llevó a cuestionar esta cohesión, lo que me llevó a la posición de que la existencia misma de una subclase (por extensión, no simplemente otra implementación de la misma interfaz) tiene un acoplamiento muy alto con su padre y, en efecto, está acoplada hasta el último detalle de cuál es su elemento primario y que cualquier cambio en el elemento primario también es un cambio en la subclase, por lo que no hay tanta diferencia entre llamar a super.sameMethod() que a super.otherMethod() .

He hecho esto antes en las siguientes circunstancias. En un caso en el que necesitaba cambiar completamente el comportamiento de un método de lo que estaba haciendo su padre y todavía necesitaba acceso al comportamiento de mi clase de abuelos. En este caso, escribí un método en la clase padre que llamaba método abuelo. Y desde el nieto llamé al otro método para padres.

  abuelo de clase
 {
     ImportantMethod ()
     {
         ...
     }

 }

 padre de clase
 {
     @anular
     ImporantMethod ()
     {
         super.ImportantMethod ();
         ... // Poner en funcionalidad padre
     }

     CallParentImportantMethod ()
     {
         super.ImportantMethod ()
     }
 }

 niño de clase
 {
     @anular
     ImportantMethod ()
     {
         ... // Implemente una funcionalidad que no es compatible con la principal pero que aún necesita un comportamiento de otras clases en la cadena superior a la principal
         super.CallParentImportantMethod ();
     }
 }

Y sí, sé que esto no es lo mejor que se puede hacer, pero dadas las limitaciones de lo que estaba haciendo, no fue posible refactorizar para evitar esto. Como práctica recomendada, definitivamente diría que evite llamar a otros métodos principales.

Es una mala práctica porque supone lo que implementa la Clase Base y cómo funciona el método en la clase base y en todas las clases heredadas. Hacer esto derrota la idea del polimorfismo y la ocultación de información.

More Interesting

¿Es posible escribir software con una máquina de estado usando la programación funcional? Como la programación funcional no tiene estado, la respuesta debería ser intuitivamente imposible.

Cómo terminar mi conocimiento informático desde la perspectiva de un desarrollador web

¿Qué tan importante es la gestión de proyectos en el desarrollo de software?

¿Qué programa debe tener cada programador en su conjunto de habilidades?

¿Hay algún creador de software de arrastrar y soltar como Scratch?

¿Es Java el lenguaje de programación más utilizado en plataformas y aplicaciones? Para un primer contador de tiempo interesado en aprender a codificar, ¿sería esta la mejor opción?

¿Cuál es la diferencia entre los servicios de prueba de software y los servicios de prueba de rendimiento?

¿Qué formas de virtualización existen?

¿Es bueno para un desarrollador pasar a la gestión de identidad y acceso? ¿Cuánta codificación está involucrada en la gestión de identidad y acceso?

Si soy programador y me cambiarán a SAP (módulo funcional), ya que dijeron que tenía una gran demanda, ¿me aburriré?

¿Vale la pena aprender COBOL hoy en día?

Cómo encontrar un buen mentor profesional en ciencias de datos fuera de la empresa para la que trabaja

¿Por qué usaría o no utilizaría Mendix o OutSystems para el desarrollo rápido de aplicaciones comerciales?

¿Cuál es su experiencia con el alojamiento de Scrum más tarde o más temprano en el día para acomodar a los equipos de desarrollo de software Agile en diferentes zonas horarias?

Cómo pasar de un desarrollador senior de .NET a un arquitecto de software .NET