Aquí tengo un segmento de código Java donde se ha creado una clase abstracta. Sin embargo, algo en lo que estoy confundido con este segmento es por qué el escritor decidió usar un constructor predeterminado y un constructor parametrizado.
abstract class Person { String personName; String personID; //default consructor Person() { } //parameterized constructor //assigns personName and personID to object at time of creation Person(String personName, String personID) { this.personName = personName; this.personID = personID; } //getters and setters public String getPersonName() { return personName; } public void setPersonName(String personName) { this.personName = personName; } public String getPersonID() { return personID; } public void setPersonID(String personID) { this.personID = personID; } }¿Alguien puede explicar por qué se han escrito estos dos constructores en lugar de solo uno u otro?
Hibernate requiere un constructor sin argumentos, utiliza la reflexión para llamar al constructor sin argumentos cuando necesita instanciar una clase persistente. Por lo tanto, un constructor puede estar presente debido a que lo necesita una biblioteca o un marco.
Aparentemente, el otro constructor está allí para su conveniencia, de modo que el programador pueda establecer el nombre y la identificación sin llamar a los setters por separado.
Si lo desea, puede hacer que el constructor sin argumentos sea privado e Hibernate aún puede usarlo.
Hay un patrón llamado encadenamiento de constructores (descrito aquí: ¿Es bueno o malo delegar a otro constructor (usando this()) dentro de un constructor ) que muestra cómo varios constructores pueden tener sentido, pero el código que se muestra no está haciendo eso.