He intentado comprender pero todavía no estoy seguro. Si hay un constructor en la clase base, ¿las clases derivadas siempre lo llamarán? Sé que pueden anularlo (no es el término correcto aquí, lo sé, me refiero a agregar código a sus constructores), pero supongo que si el constructor está definido en la clase base, los derivados siempre lo llamarán. ¿Es eso cierto?Herencia de constructores
6
A
Respuesta
6
Sí, si hay un constructor sin parámetros, siempre se llamará. Si hay más de un constructor, puede elegir cuál de ellos para llamar con la palabra clave base
:
class Parent {
public Parent() {}
public Parent(int x) {}
}
class Child : Parent {
public Child(int x) : base(x) {
}
}
si hay ningún constructor sin parámetros, usted será obligados para hacer esto:
class Parent {
public Parent(int x) {}
}
class Child : Parent {
// This will not compile without "base(x)"
public Child(int x) : base(x) {
}
}
2
Si solo hay un constructor sin parámetros en la clase base, el constructor de clases hijo siempre lo llamará primero. Por otro lado, si tiene otros constructores definidos en la clase base, entonces la clase hija tendrá una opción a la que basar el constructor para llamar.
Cuestiones relacionadas
- 1. Herencia de Java - constructores
- 2. Constructores y herencia
- 3. cómo escribir constructores de herencia C++
- 4. Constructores y herencia predeterminados en Java
- 5. Mixins, multi-herencia, constructores, y los datos
- 6. constructores La herencia en C++ 0x
- 7. Orden de constructores/destructores de llamada en herencia
- 8. problema con los constructores y la herencia en C#
- 9. constructores
- 10. Demasiadas matrices de constructores para el patrón de diseño de inyección/herencia de dependencias
- 11. Herencia de Constructor de Java
- 12. Constructores Groovy
- 13. Ventaja de constructores genéricos
- 14. Constructores de Java
- 15. Constructores de clase parciales
- 16. Confusión de constructores
- 17. Herencia virtual pura, herencia múltiple, y C4505
- 18. constructores piden otros constructores en vb.net a la C#
- 19. ¿Qué tan útil sería heredar constructores en C++?
- 20. Sobrecarga de constructores en VBScript
- 21. Uso de Constructores - Par Duda
- 22. Propósito de constructores predeterminados explícitos
- 23. Scala type malentendido de constructores
- 24. Lanzando excepciones de los constructores
- 25. combinación con el patrón de herencia módulo
- 26. refactoración grandes constructores
- 27. Conversión por constructores
- 28. Copiar constructores - C++
- 29. Constructores reutilizables C++
- 30. Diseñando constructores para Testability
No estoy seguro de obtenerlo. En el primer ejemplo, hay Child (int x): base (x), ¿así que supongo que se llamarán ambos? – Miria
@Miria: Sí. No hay forma de que * algún * constructor base no se invoque (por ejemplo, en el segundo ejemplo, el compilador no le permitirá eliminar 'base (x)'); usar 'base' solo le permite elegir * a cuál se llamará, y con qué parámetros. – Jon