public class Animal {
public void comer(){
System.out.println("Animal comiendo...");
}
}
class Caballo extends Animal{
public void comer(){
System.out.println("Caballo comiendo...");
}
}
public static void main(String... args){
Animal a = new Animal();
Caballo c = new Caballo();
a.comer();
c.comer();
}
Al ejecutar el código anterior obtenemos lo siguiente:
Animal comiendo...
Caballo comiendo...
Ahora en su versión polimórfica:
public static void main(String... args){
Animal a = new Caballo();
Caballo c = new Caballo();
a.comer();
c.comer();
}
Obtenemos lo siguiente:
Caballo comiendo...
Caballo comiendo...
class Animal {
public void comer(){
System.out.println("Animal comiendo...");
}
}
class Caballo extends Animal{
public void comer(){
System.out.println("Caballo comiendo...");
}
public void relinchar(){
System.out.println("Caballo relinchando...");
}
}
class ProbarMetodos{
public static void main(String... args){
Animal a = new Caballo();
Caballo c = new Caballo();
a.comer();
c.comer();
a.relinchar(); //error!
}
}
Reglas para sobreescribir un método::
Las reglas básicas para la sobreescritura de métodos son las siguientes:
+ La lista de argumentos del método debe ser exactamente la misma.
+ El tipo de retorno debe de ser el mismo o un subtipo del tipo de retorno declarado originalmente.
+ El nivel de acceso no debe de ser más restrictivo.
+ El nivel de acceso puede ser menos restrictivo.
+ Los métodos de instancia pueden ser sobreescritos solamente si han sido heredados por la subclase.
+ Los métodos sobreescritos pueden arrojar cualquier excepción no verificada(de tiempo de ejecución) por el compilador.
+ Los métodos sobreescritos NO pueden arrojar excepciones verificadas por el compilador.
+ No se puede sobreescibir un método marcado como final.
+ No se puede sobreescibir un método marcado como estático (static).
+ Si un método no puede ser heredado, no puede ser sobreescrito.
Invocar la versión de la superclase de un método sobreescrito::
class Caballo extends Animal{
public void comer(){
super.comer();
}
}
Hasta aquí llegamos con este tema. ¿Alguna duda? deja tu comentario.
Más sobre programación en Java aquí.
Excelente es la segunda vez que miro y siempre es util a favoritos gracias!
ResponderBorrarGracias por tus comentarios. Saludox
ResponderBorrarOhhhhhhhhh!! Genialísimo!!
ResponderBorrarMe has salvado la vida!
Has logrado lo que mi profe no pudo *-*
Logré entender!
Mission Acomplished: Jajajajaja, gracias por tu comentario. Saludox.
ResponderBorrarGracias por la explicación. Estoy aprendiendo a programar en Java y tenía dudas sobre a que se referia el termino "Override", quedó aclarado.
ResponderBorrarGracias...muy claro
ResponderBorrarinteresante la ayuda, pero podrias poner un ejemplo mas donde expliques paso por paso, donde no solo expliques acepciones sino tambien se vea detalladamente toda la rutina que hay que hacer para llegar a un resultado final. Me gustaria que fueraa asi.
ResponderBorrarClaudia,
ResponderBorrarMe gustaría que fueras más específica ya que, de acuerdo a mi punto de vista, la explicación que hago es paso a paso e intento explicar cuestiones generales en la sobreescritura de métodos. ¿Cuál es tu duda particular?
CUAL ES LA PALABRA CLAVE QUE PERMITE SOBRESCRIBIR UN METODO HEREDADO?
ResponderBorrar@override
Borrarsaben la verdad yo noy experto y debo comentar que estoy aprendiendo, a programar ahce poco, pero puedo comentar que la forma de comentar o de explicar el funcionamiento de una clase, metodo, arreglo etc me ha gustado muchisimo seguire buscando en este portal ejemplos, un usuario que queda mu agradecido de este portal
ResponderBorrarAñadir un último caso, utilizando super en la clase derivada y fuera:
ResponderBorrarclass Animal {
public void comer(){
System.out.println("Animal comiendo...");
}
}
class Caballo extends Animal{
public void comer(){
System.out.println("Caballo comiendo...");
}
public void usoSuper(){
System.out.println(super.comer());
}
}
public static void main(String... args){
Animal a = new Animal();
Animal b = new Caballo(); //Solo en este sentido
Caballo c = new Caballo();
a.comer();
b.comer(); //Causa Overriding mostrando el de la derivada
b.super.comer(); //Es afectado por el Overriding pero utilizando super accedemos al metodo de la classe de la cual hereda.
c.usoSuper();
}
En este caso veríamos:
Animal comiendo... //evidente
Caballo comiendo... //sin utiliza super vemos la el metodo de la classe derivada
Animal comiendo... //usando super
Animal comiendo... //otro método encapsulando comer
Espero que a alguien le pueda ser útil :)
perfecto!!
ResponderBorrarLa Regla: "Los métodos sobreescritos NO pueden arrojar excepciones verificadas por el compilador".
ResponderBorrarQuisiera matizar que:
Precisamente el metodo que se sobreescribe (el super metodo o sobreescrito) es que que puede. El que no puede arrojar una excepcion verificada es el metodo que sobreescribe al super. Sin embargo puede arrojar menos excepciones que el super o bien una excepcion subclase de la que arroja el super.
Gracias por tus comentarios. Te hago una pregunta de algo que no me queda del todo claro.
ResponderBorrarCuando hacés:
public static void main(String... args){
Animal a = new Caballo();
Caballo c = new Caballo();
a.comer();
c.comer();
}
Obtenés:
Animal comiendo...
Caballo comiendo..
Pero cuando hacés:
class Animal {
public void comer(){
System.out.println("Animal comiendo...");
}
}
class Caballo extends Animal{
public void comer(){
System.out.println("Caballo comiendo...");
}
public void relinchar(){
System.out.println("Caballo relinchando...");
}
}
class ProbarMetodos{
public static void main(String... args){
Animal a = new Caballo();
Caballo c = new Caballo();
a.comer();
c.comer();
a.relinchar(); //error!
}
}
relinchar() tira en un error. ¿Por qué? Si por más que la referencia es un Animal el objeto es un Caballo, ¿no debería funcionar?
Para mí si en el primer ejemplo 'a.comer()' devuelve "Caballo comiendo", en el segundo 'a.relinchar()' tendría que andar.
Perfecto me saco de un gran apuro entendi mas rapido aqui que en la clase del profesor saludos.
ResponderBorrarEXELENTE compadre entendi de maravilla saludos gracias. sigue posteando cosas de java (matrices y cosas asi )
ResponderBorrarExactamente lo que buscaba ;-) gracias
ResponderBorrarbuen articulo , pero hubiese sido mejor utilizar datos de la vida real para entender mejor su funcionalidad y donde usarlo , ejemplo con datos sistema banco...algo pequeño
ResponderBorrarExcelente la explicación
ResponderBorrarQue buena explicación, no encontré nada parecido por ahí, muchas gracias, sigue así.
ResponderBorrarBuena mi negro, buena. Solo he visto dos de tus trabajos pero geniales. Buena onda :)
ResponderBorrarNo hay nada mas simple para entender este tema en java gracias Monillo007
ResponderBorrarMuchas gracias por tu trabajo ! realmente se aprecia! sigue asi!
ResponderBorrarMuchisimas gracias :)
ResponderBorrarCuidado con lo que dices de las excepciones. Los métodos sobrescritos sí pueden lanzar excepciones verificadas, de acuerdo con ciertas normas.
ResponderBorrarMuy buenos apuntes, gracias por compartir tu conocimiento
ResponderBorrar