La implementación de una variante independiente de super
que rompe método virtual de despacho sería una muy mala idea.
Vamos a pensar en ello durante un tiempo.
abstract class Base {
abstract String Description();
String toString() { return "Base"; }
}
class Derived extends Base {
String Description() { return "Derived description"; }
String toString() { return "Derived"; }
static void use(Base instance) {
System.out.println(instance.toString());
System.out.println(instance.Description());
}
}
Ahora, tomemos su sugerencia y suponemos que super
es válido y hace lo que usted sugiere; entonces podemos escribir en Derived
:
class Derived extends Base {
// Previous declarations omitted.
void useSuper() { Derived.use(super); }
void useThis() { Derived.use(this); }
static void main() {
Derived instance = new Derived();
instance.useThis();
instance.useSuper();
}
}
Ahora, si le he entendido, que sugieren que la función principal debe imprimir en orden:
- la implementación de
toString()
de Derived
: "Derivado".
- la implementación de
Description()
de Derived
: "Descripción Derivado"
- la implementación de
toString()
de Base
: "Base".
- la implementación de
Description()
de Base
: No existe. Y las dos soluciones que puedo pensar conducen a problemas mayores:
- Eleve una excepción: enhorabuena, ahora puede romper cualquier programa que dependa de métodos abstractos realmente implementados sin siquiera pensar en ello. (¿Cómo sabría que una función llamará al método abstracto?)
- Devuelva la implementación de
Derived
: rompe la coherencia.
En definitiva, un uso de la palabra super
tales rompe conceptualmente la programación orientada a objetos.
¿Cómo falla? ¿Es un error de compilación? Una excepción de tiempo de ejecución? o comportamiento inesperado? (por ejemplo, 'System.out.println (super)' imprime lo mismo que 'this.toString()') –
El problema es que se produjo un error de compilación en el segundo caso con 'super'. El mensaje de error es "'.' esperado "y parece un error de sintaxis. – JaycePark
* "Es una pregunta simple." * Tenga en cuenta que "¿Cuál es el significado de la vida?" es una pregunta simple Es la respuesta que es más difícil. ;) –