method - override java definition
¿Qué método está anulado? (5)
run()
métodorun()
de la interfaz B se implementará en la clase Main mediante el método reemplazado de la clase A.
Agregar un punto extra,
No escribirás el método run()
en la clase secundaria Main
, no obtendrás el conocido error "Unimplemented methods". Esto es cierto para public
métodos public
de clase A para métodos no públicos. Obtendrá error de compilación: el método heredado no puede ocultar el método abstracto público.
Esto se debe a que los métodos de interfaz son públicos por defecto y no se puede ocultar con el modificador de acceso default (package private)
.
Muestra:
class A{
public void run() {
System.out.println("This method will be inherited.");
}
}
interface B{
void run();
}
class Main extends A implements B{
public static void main(String args[]){
Main m = new Main();
m.run();
}
}
OUTPUT : This method will be inherited.
En la instancia de código anterior, el método run()
se hereda de la clase A que implementará el método run()
de la interfaz B.
Esta pregunta ya tiene una respuesta aquí:
Class A
tiene el método run()
y la interfaz B también tiene el método run()
. La pregunta es simple, ¿qué método run()
está anulado en Main
clase Main
y cómo lo probaremos? ¿Por qué no hay conflicto (error de tiempo de compilación) en este código?
class A{
void run(){System.out.println("A class");}
}
interface B{
void run();
}
class Main extends A implements B{
public static void main(String args[]){
Main m = new Main();
m.run();
}
// Overridding method
public void run(){
System.out.println("run method");
}
}
El método de la superclase siempre se denomina método overridden
, mientras que el método de la subclase se llama método de overriding
.
El método final cannot be
anulado . [si el método de la superclase es final]
Los métodos finales can
anular . [Léelo como una forma gramatical. Este método está en la subclase y es final, pero el método de la superclase no es final]
Lo que se llamará es
public void run(){
System.out.println("run method");
}
¿Por qué?
Está implementando la run
de la interface B
y también está anulando la implementación A
de la misma.
Si elimina la última implementación de run()
y elimina los implements B
, se run()
de A
Mira este enlace ...
Llegarás a saber más de lo que contamos ...
http://docs.oracle.com/javase/tutorial/java/IandI/override.html
se anula la run
de B
se implementa la run
de B
Como B
es una interfaz, solo establece cómo se comportan sus objetos ante los demás y no aplica ningún comportamiento en sí mismo.