English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Cuando tenemos dos clases, una que extiende a otra clase, si ambas clases tienen métodos idénticos, incluyendo parámetros y tipo de retorno (por ejemplo, muestra), el método en la subclase sobrescribirá el método en la superclase.
es decir, debido a que es herencia. Si instanciamos la subclase, se creará una copia de los miembros de la superclase en el objeto de la subclase, por lo que ambos métodos están disponibles para los objetos de la subclase.
pero, si se llama al método(Muestra)entonces se ejecutará el método de muestra de la subclase para sobrescribir el método de la superclase.
class Super{ public static void sample(){ System.out.println("Método de la superclase"); } } public class OverridingExample extends Super { public static void sample(){ System.out.println("Método de la subclase"); } public static void main(String args[]){ Super obj1 = (Super) new OverridingExample(); OverridingExample obj2 = new OverridingExample(); obj1.sample(); obj2.sample(); } }
Resultados de salida
Método de la superclase Método de la subclase
Cuando la superclase y la subclase contienen métodos idénticos (inclusive de parámetros) y si son estáticos, el método de la superclase será ocultado por el método de la subclase.
Este mecanismo se abrevia como "ocultamiento de métodos", aunque la superclase y la subclase tienen firmas estáticas idénticas para métodos, no se considera una sobrescripción.
class Super{ public static void demo() { System.out.println("This is the main method of the superclass"); } } class Sub extends Super{ public static void demo() { System.out.println("Este es el método principal de la subclase"); } } public class MethodHiding{ public static void main(String args[]) { MethodHiding obj = new MethodHiding(); Sub.demo(); } }
Resultados de salida
Este es el método principal de la subclase
La clave del sobrecarga de métodos es que si la superclase y la subclase tienen métodos con la misma firma, para los objetos de la subclase, ambos son accesibles. Se ejecutará el método correspondiente según el tipo de objeto (referencia) utilizado para almacenar el objeto.
SuperClass obj1 = (Super) new SubClass(); obj1.demo() // invoca el método demo de la superclase SubClass obj2 = new SubClass(); obj2.demo() //invoca el método demo de la subclase
Sin embargo, en el caso de los métodos estáticos, ya que no pertenecen a ninguna instancia, debe usar el nombre de la clase para acceder.
SuperClass.demo(); SubClass.Demo();
Por lo tanto, si la superclase y la subclase tienen métodos estáticos con la misma firma, el objeto de la subclase puede usar una copia del método de la superclase. Ya que son estáticos, la llamada al método se resuelve automáticamente en tiempo de compilación, por lo que los métodos estáticos no se pueden sobrescribir.
Sin embargo, debido a que se puede usar una copia del método estático, si llama a un método de la subclase, se redefine/Métodos ocultos de la superclase.