Sustitución de métodos en Java tienen las siguientes características:Sustitución de métodos limitaciones en java
1> El método Overrinding deben tener la misma lista de argumentos como el método de la clase dominante.
2> El tipo de devolución debe ser la misma/subclase del tipo de devolución para el método de clase principal.
3> El nivel de acceso debe ser igual o menos restrictivo que el método de la clase padre.
4> El método modificado puede arrojar la misma excepción o más estrecha y no una más amplia.
* sólo quería saber por qué es tan para el punto *
* 2 - ¿por qué no subclase de una superclase? *
3 - ¿por qué el nivel de acceso debería ser menos restrictivo?
4 - why it should throw narrow exception?
Según mi entender es sólo que si yo estoy creando un refrence clase padre para crear un objeto de clase del niño y tratando de correr por cada uno de los escenarios luego
Asumamos A es la clase padre y B es clase hija teniendo ambas método printAndReturnSomething()
public class A{
public B printAndReturnSomething(){
S.O.P("Inside A Print");
return new B();
}
}
Ahora tenemos la clase hija B como
public class B extends A{
public A printAndReturnSomething(){ // I know this isn't possible to return A but had it been then
S.O.P("Inside A Print");
return new A();
}
}
Ahora bien, si hago algo como esto
A a =new B();
y ahora ya que tengo una referencia de A, así que esperar que el tipo de retorno sea de tipo B
B returnedValue=a.printAndReturnSomething(); // But it actually calls the child class method and hence returns A. So here comes the contradiction.
Similaraly para el escenarios 3 y 4. ¿Es correcto mi entendimiento? ¿Me estoy perdiendo algo más relevante?
Gracias por su ans y especialmente por la última línea "Siempre piense en la herencia ya que" se comporta como la superclase ", o" puede tratarse como la superclase ", y todo esto debe quedar claro". – Deva