¿Se puede resolver realmente un problema de diamante en Java?

A2A. No voy a hacer tu tarea por ti, pero te daré algunos consejos. Estoy de acuerdo en que este es un problema complicado.

Descargo de responsabilidad: no tengo un compilador Java configurado en mi computadora, así que no he probado nada de esto y no he programado en Java durante muchos años. Entonces mis habilidades estarán oxidadas. Lo que sugiero aquí puede no funcionar en absoluto.

  • Le sugiero que busque cómo funcionan las variables miembro estáticas y cómo accede a una variable estática desde una instancia de objeto.
  • Parece que hay algo que debe hacer dentro del constructor de una clase derivada para inicializar una clase base. (Puede que ya lo sepas).

Te diriges en la dirección correcta creando una interfaz para las dos clases derivadas en Result.

Lo que te deshabilitaré de inmediato es que no hay forma de implementar directamente un patrón de “diamante” de herencia múltiple en las clases de Java. Creo que el objetivo del ejercicio es aprender a crear el mismo comportamiento que obtendría de un “diamante” de herencia múltiple, y creo que hay una manera de hacerlo.

No tiene dos clases base en este ejemplo. Dejando de lado la desaconsejabilidad de la jerarquía de herencia sugerida, Test es su clase base y el Estudiante hereda de ella. El deporte hereda del estudiante.

Un problema de diamante requiere que una sola clase herede directamente de dos clases base separadas. Se vería algo así como “clase Deporte extiende Prueba, Estudiante” y eso no es posible.

Probablemente sea más correcto decir que Java no permite el problema del diamante en lugar de decir que resuelve el problema del diamante.

En Java 8 ahora es posible implementar métodos predeterminados en las interfaces. Eso puede plantear una forma del problema del diamante. La forma en que se resuelve es que el compilador arrojará una excepción si la encuentra y usted tiene que hacer la corrección.

De la oración que subrayó, no creo que este problema tenga nada que ver con las interfaces, porque el problema establece que Estudiante, Prueba y Deportes son todas clases y que el Resultado debe heredarse de esas clases. Las interfaces no son clases. Además, como ha notado, las interfaces no pueden tener variables de instancia, que todas las clases mencionadas tienen.

Creo que el problema es tratar de hacer que se te ocurra un árbol de herencia alternativo ya que no puedes tener herencia múltiple. Pero puede tener la clase A, luego B extiende A, C extiende B, D extiende C. Una instancia de D también es una instancia de A, B y C y hereda sus campos y métodos de A, B y C.

Gracias Mark y Jon. El propósito de este problema era explorar nuevas posibilidades y aprender sobre la herencia en Java. En realidad, este es un problema de un libro de C ++ y se puede resolver en C ++, pero nuestro maestro intencionalmente dio este problema para que podamos explorar y aprender cosas nuevas que no sabemos sobre JAVA .

Tengo que decir que la declaración del problema no tiene sentido para mí. “Una prueba de clase se deriva de la clase Estudiante …” ¿Eh? Eso es absurdo. La herencia es una relación es-es . De ninguna manera podemos decir “una prueba es un estudiante”. Lo mismo para los deportes.

More Interesting

Tengo 26 años con un título en informática trabajando como Consultor ERP en una pequeña empresa de software durante 1 año. ¿Qué educación / certificación adicional me dará ventaja?

¿Cuál es el principal desafío de las métricas de un producto y las métricas para el modelo de requisitos?

¿Cuáles son las métricas de rendimiento de software más importantes?

¿Cuáles son algunas de las mejores prácticas para la ingeniería de lanzamiento con un programa multiplataforma de Unix?

Si crea una pequeña herramienta de software para hacer algo importante dentro de un gran proceso desconocido, ¿cuál sería el método para calcular un presupuesto justo para esto?

¿Cómo prueban los desarrolladores los juegos de final abierto?

¿Habrá alguna vez un motor de software / juego que elimine / minimice el efecto de cuello de botella de la CPU en los juegos?

¿Cuáles son las herramientas para la colaboración de soporte técnico y desarrollo?

¿Cómo puede una organización de desarrollo de productos ágil elaborar una respuesta competitiva a una solicitud de propuesta (RfP) tradicional con muchos requisitos?

¿Quora se convirtió en un sitio de promoción indirecta de Free Code Camp?

¿Cuáles son algunos patrones de diseño de software que aún no están en el vocabulario común?

¿Cuáles son algunas cosas que uno debe lograr en su primer rol de ciencia de datos?

¿Cuál es el mejor y más barato software para generar artículos?

Cómo dejar de postergar y comenzar a aprender Java

¿Qué debe contener la documentación del software?