Overriding y Redefining (también conocido como escondite) son casi los alguna cosa excepto:
primordial es para los métodos de instancia y redefiniendo o escondite es para métodos de clase. La redefinición es solo en el caso de los métodos estáticos ya que los métodos estáticos no tienen un polimorfismo de tiempo de ejecución.
Consulte la siguiente código de aclaración:
class Foo {
public static void classMethod()
{
SOP("classMethod() in Foo");
}
public void instanceMethod()
{
SOP ("instanceMethod() in Foo");
}
}
class Bar extends Foo {
public static void class Method()
{
SOP ("classMethod() in Bar");
}
public void instanceMethod() {
SOP ("instanceMethod() in Bar");
}
}
class Test {
public static void main(String[] args) {
Foo f = new Bar();
f.instanceMethod();
f.classMethod();
}
}
la salida correspondiente a este código es: instanceMethod() en la barra de classmethod() en Foo
La razón para esta salida:
Dado que instanceMethod() es un método de instancia, en el que Bar reemplaza el método de Foo, en tiempo de ejecución, la JVM usa la clase real de la instancia f para determinar qué método ejecutar. Aunque f se declaró como un Foo, la instancia real que creamos fue una nueva barra().Entonces en tiempo de ejecución, el J.V.M. encuentra que f es una instancia de Bar, por lo que llama a instanceMethod() en Bar en lugar de invocar a Foo.
Con classMethod(), como es un método de clase, el compilador y J.V.M. no espere necesitar una instancia real para invocar el método. E incluso si proporciona uno, el J.V.M. nunca lo miraré. El compilador solo verá el tipo declarado de la referencia y usará ese tipo declarado para determinar, en tiempo de compilación, a qué método llamar. Como f se declara como tipo Foo, el compilador examina f.classMethod() y decide que significa Foo. método de clase No importa que la instancia referida por f sea en realidad una barra; para los métodos estáticos, el compilador solo usa el tipo declarado de la referencia.
Es por eso que dije al principio que un método estático no tiene polimorfismo en tiempo de ejecución.
Redefinición. La anulación solo funciona con métodos de instancia heredados. – helpermethod
¿Qué es "redefinición"? Defínelo o proporcione un enlace para ponernos en la misma página. –