2011-05-11 10 views
5

Me preguntaba si tengo una súper clase abstracta con x diferentes constructores, y quiero poder usar todos esos constructores en una subclase, ¿tengo que escribir todos los constructores x en la subclase y simplemente déjalos llamar a todos súper (...)? Parece código redundante ..Pasando la construcción a la clase superior

Un ejemplo de la claridad:

public class SuperClass { 
public SuperClass() { 
... 
} 
public SuperClass(double d) { 
... 
} 
public SuperClass(BigDecimal b) { 
... 
} 
public SuperClass(BigDecimal b, String s) { 
... 
} 
[...] 
} 

¿Tengo que por necesidad:

public class SuperClass { 
public SubClass() { 
super(); 
} 
public SubClass(double d) { 
super(d); 
} 
public SubClass(BigDecimal b) { 
super(b); 
} 
public SuperClass(BigDecimal b, String s) { 
super(b, s); 
} 
[...] 
} 

Respuesta

5

Pero hay que hacerlo de esta manera. De esta forma, usted está decidiendo qué quiere exponer en la subclase. Además, algunos constructores pueden no ser apropiados para una subclase, por lo tanto, esto no funciona de manera predeterminada sin que usted lo codifique explícitamente.

2

No necesita suministrar constructores para cada sobrecarga de constructores de base. Simplemente necesitas uno. Si su constructor base ofrece un constructor predeterminado (sin parámetros), entonces ni siquiera necesita proporcionar un constructor usted mismo. El compilador generará automáticamente un constructor predeterminado para su clase que llama automáticamente al constructor predeterminado de su clase base.

Nota: no es necesario llamar directamente al super(), ya que está implícito sin parámetros. Solo se requiere cuando no existe un constructor predeterminado.

Al ver que muchos constructores diferentes, y el hecho de que no los necesita todos podría implicar que la clase principal está haciendo demasiado.

1

puede tener un código como el siguiente:

public class SuperClass { 
public SuperClass() { 
... 
} 
public SuperClass(double d) { 
... 
} 
public SuperClass(BigDecimal b) { 

} 
public SuperClass(BigDecimal b, String s) { 
this(b); 
} 
[...] 
} 

Y tener una subclase como:

public class SubClass extends SuperClass{ 
public SubClass() { 
super(); 
} 
public SubClass(double d) { 
super(d); 
} 

public SuperClass(BigDecimal b, String s) { 
super(b, s); 
} 
[...] 
} 
1

Si desea cualquier tipo de constructor tanto en parenr y el niño, entonces sí, es necesario para especificarlos explícitamente, pero no es necesario llamar al super() explícitamente.

Cuestiones relacionadas