Me gustaría saber para qué sirve un constructor para una clase abstracta; como no creamos instancias de clases abstractas, ¿por qué necesitaríamos tal constructor?¿De qué sirve crear un constructor para una clase abstracta en Java?
Respuesta
habrá ocasiones en las que tenga una inicialización común de variables de instancia que todas las clases heredadas necesitan configurar. Instancias una clase abstracta cuando la extiendes y esa clase concreta tiene un constructor que proporcionará los parámetros al constructor de la clase abstracta.
Todavía pueden ser invocados por los constructores de clases que heredan de aquél, haciendo que la refactorización de código sea un buen uso para tener un constructor en la clase abstracta.
Si tiene campos finales no inicializados en una clase abstracta, deberá inicializarlos en un constructor.
E.g.
abstract class A {
final int x;
}
no se compilará sin un constructor que asigna a x
.
Si su clase no declara un constructor, javac creará un constructor no-arg, do-nothing para usted. Luego, cuando su subclase se inicialice, llamará al constructor no operativo generado y la vida es buena.
Sin embargo, si su clase declara cualquier constructor, javac NO lo hará por usted. En ese caso, el constructor de la subclase necesita llamar explícitamente al constructor de la clase padre. De lo contrario, no podrá inicializar a los miembros de la clase principal, como se menciona en la respuesta anterior.
Los constructores para clases abstractas son utilizados por subclases (invocados desde constructores de subclases usando super(params)
).
Debe hacer estos constructores protected
para dejar eso en claro.
No crea instancias de clases abstractas pero el constructor se invoca cuando se crea una instancia de una subclase.
El uso podría ser para inicializar atributos comunes, es decir.
import java.util.List;
import java.util.ArrayList;
abstract class BaseClass {
protected List list; // visible from subclasses
public BaseClass() {
System.out.println("to abstract...");
// common initialization to all subclasses
list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
}
}
class ConcreteClass extends BaseClass {
public ConcreteClass(){
// The list is initialized already
System.out.println("now it is concrete and the list is: = "+ this.list);
}
}
class TestAbstractClass {
public static void main(String [] args) {
BaseClass instance = new ConcreteClass();
}
}
salida
$ java TestAbstractClass
to abstract...
now it is concrete and the list is: = [a, a, a]
De-duplicación de conocimiento/comportamiento común.
E.g. un auto: todos sus autos se construirán con un cuerpo y cuatro ruedas y un motor. Así que haces esta parte de la construcción en el constructor de la clase abstracta Car llamando funciones como Body(), Wheel (int x), Engine(). Cada clase de vehículo particular tendrá su propia implementación de Cuerpo(), Rueda() y Motor(), pero todos harán los mismos pasos para construir el auto con ellos, por lo que no es necesario duplicar esos pasos en cada uno de ellos. clases En este caso, implementa ese comportamiento común en el ancestro.
Acepto, los constructores se crean suponiendo que habrá instancias. Si tiene muchos códigos comunes, puede pensar en crear un Constructor, pero es mucho mejor ponerlo en un método init()
.
esto es un mal consejo, entonces cada clase de in-timeing necesita recordar llamar a super.init() y se vuelve desordenado rápido, este es un consejo no estándar y realmente malo. –
- 1. Constructor privado en la clase abstracta
- 2. ¿Es un constructor público en una clase abstracta un código?
- 3. Cómo crear una instancia de una clase abstracta de Java con un parámetro de constructor con un cierre maravilloso
- 4. ¿Es bueno tener un constructor en clase abstracta?
- 5. ¿Para qué sirve crear una clase dentro de la interfaz e interfaz dentro de la clase
- 6. ¿Hay buenas razones para un constructor público de una clase abstracta
- 7. constructor de copia: copia completa una clase abstracta
- 8. ¿Para qué sirve {code} en Java?
- 9. ¿Cómo crear una matriz dinámica de una clase abstracta?
- 10. Java - ¿Clase abstracta para contener variables?
- 11. Implementación dinámica para clase de interfaz/abstracta en Java
- 12. ¿Para qué sirve la clase A [_]?
- 13. cómo crear un constructor genérico para una clase genérica en Java?
- 14. ¿De qué sirve escribir una clase dentro de una interfaz?
- 15. ¿Cómo puedo implementar una clase singleton abstracta en Java?
- 16. ¿Para qué sirve el sombreado variable en una clase de Java?
- 17. ¿Por qué no podemos crear objetos para una clase abstracta en C++?
- 18. ¿De qué sirve una clase interna de método local?
- 19. ¿Para qué sirve Enum?
- 20. ¿Para qué sirve Clojure?
- 21. Relevancia del constructor 'público' en la clase abstracta
- 22. ¿Cómo implementar una clase abstracta en ruby?
- 23. llamada constructor de la subclase de la clase abstracta en Java
- 24. ¿Para qué sirve UnmanagedMemoryStream?
- 25. crear objeto de clase abstracta e interfaz
- 26. ¿Cómo saber si una clase de Java es abstracta?
- 27. ¿Para qué sirve la invocación de un método virtual Java?
- 28. ¿Es una interfaz de Java una clase abstracta?
- 29. serialización de una clase abstracta
- 30. Patrón de diseño del constructor: sin clase/interfaz abstracta
Un ejemplo es javax.swing.AbstractAction –