programacion - Sobrecarga y anulación de Java
manual de programacion android pdf (8)
Definición simple: la sobrecarga de métodos se relaciona con la noción de tener dos o más métodos (funciones) en la misma clase con el mismo nombre pero diferentes argumentos.
Mientras que la invalidación del método significa tener dos métodos con los mismos argumentos, pero una implementación diferente. Uno de ellos existiría en la clase principal (clase base), mientras que otro estará en la clase derivada (clase secundaria). Para esto se requiere una anotación de anulación.
Compruebe esto: Haga clic aquí para ver un ejemplo detallado
Siempre decimos que la sobrecarga de métodos es el polimorfismo estático y la invalidación es el polimorfismo en tiempo de ejecución. ¿Qué queremos decir exactamente con estática aquí? ¿Se resolvió la llamada a un método al compilar el código? Entonces, ¿cuál es la diferencia entre la llamada al método normal y llamar a un método final? ¿Cuál está vinculado en tiempo de compilación?
Estoy de acuerdo con Rachel, porque en el libro K&B se menciona directamente que la sobrecarga no pertenece al polimorfismo en el capítulo 2 (orientación a objetos). Pero en muchos lugares, encontré que la sobrecarga significa polimorfismo estático porque es tiempo de compilación y sobrepasa significa polimorfismo dinámico porque es tiempo de ejecución.
Pero una cosa interesante es que en un libro de C ++ (Programación Orientada a Objetos en C ++ - Robert Lafore) también se menciona directamente que la sobrecarga significa polimorfismo estático. Pero una cosa más es que java y c ++ son dos lenguajes de programación diferentes y tienen diferentes técnicas de manipulación de objetos, por lo que el polimorfismo difiere en c ++ y java.
La sobrecarga de métodos significa hacer varias versiones de una función en función de las entradas. Por ejemplo:
public Double doSomething(Double x) { ... }
public Object doSomething(Object y) { ... }
La elección de qué método llamar se realiza en tiempo de compilación. Por ejemplo:
Double obj1 = new Double();
doSomething(obj1); // calls the Double version
Object obj2 = new Object();
doSomething(obj2); // calls the Object version
Object obj3 = new Double();
doSomething(obj3); // calls the Object version because the compilers see the
// type as Object
// This makes more sense when you consider something like
public void myMethod(Object o) {
doSomething(o);
}
myMethod(new Double(5));
// inside the call to myMethod, it sees only that it has an Object
// it can''t tell that it''s a Double at compile time
Anulación del método significa definir una nueva versión del método por una subclase del original
class Parent {
public void myMethod() { ... }
}
class Child extends Parent {
@Override
public void myMethod() { ... }
}
Parent p = new Parent();
p.myMethod(); // calls Parent''s myMethod
Child c = new Child();
c.myMethod(); // calls Child''s myMethod
Parent pc = new Child();
pc.myMethod(); // call''s Child''s myMethod because the type is checked at runtime
// rather than compile time
Espero que eso ayude
No creo que puedas llamar sobrecarga a ningún tipo de polimorfismo. Los métodos sobrecargados están vinculados en el momento de la compilación, lo que impide que se llame polimorfismo.
El polimorfismo se refiere al enlace dinámico de un método a su llamada cuando utiliza una referencia de clase base para un objeto de clase derivado. Los métodos primordiales son cómo implementas este comportamiento polimórfico.
Primero, quiero hablar sobre el polimorfismo en tiempo de ejecución / dinámico y el polimorfismo estático / en tiempo de compilación.
Polimorfismo en tiempo de compilación / estático: como su nombre sugiere, vincula la llamada de la función a su función apropiada en el momento de la compilación. Eso significa que el compilador sabe exactamente qué función llamada está asociada a qué función. La sobrecarga de funciones es un ejemplo de polimorfismo de tiempo de compilación.
Tiempo de ejecución / Polimorfismo dinámico: -En este tipo de polimorfismo, el compilador no sabe qué funciones llaman asociadas a qué función hasta la ejecución del programa. P.ej. función de anulación.
AHORA, ¿cuáles son las funciones de anulación y sobrecarga de funciones?
Sobrecarga de funciones: - mismo nombre de función pero diferente función firma / parámetro.
eg. Area(no. of parameter)
{ -------------
----------------
return area;}
area of square requires only one parameter
area of rectangle requires two parameters(Length and breadth)
anulación de funciones: - altera el trabajo de una función que está presente tanto en la clase Superclase como en la clase Infantil. p.ej. El nombre () en las superclases imprime "hola Rahul", pero después de abrumar en clase de niños, imprime "hola Akshit"
Sobrecarga de propiedad
Los nombres de los métodos --------------> deben ser los mismos ---------------- deben ser los mismos
Los tipos Arg ------------------> deben ser diferentes (al menos arg)
Método Firma
Tipo de retorno
Privado, estático, final
Modificador de acceso
trata de atraparlo
Método de resolución
Tienes razón: las llamadas a métodos sobrecargados se realizan en tiempo de compilación. Por eso es estático .
Las llamadas a métodos anulados se realizan en tiempo de ejecución, según el tipo en el que se invoca el método.
En los métodos virtuales wikipedia dice:
En Java, todos los métodos no estáticos son por defecto "funciones virtuales". Sólo los métodos marcados con la palabra clave final son no virtuales.
final
métodos final
no se pueden anular, por lo que se realizan de forma estática.
Imagina el método:
public String analyze(Interface i) {
i.analyze();
return i.getAnalysisDetails();
}
El compilador no puede sobrecargar este método para todas las implementaciones de Interface
que posiblemente se le puedan pasar.
La sobrecarga de métodos simplemente significa proporcionar dos métodos separados en una clase con el mismo nombre pero diferentes argumentos, mientras que el tipo de retorno del método puede ser diferente o no, lo que nos permite reutilizar el mismo nombre de método.
Pero ambos métodos son diferentes, por lo tanto, el compilador puede resolverlos en tiempo de compilación, por eso también se conoce como Polimorfismo de tiempo de compilación o Polimorfismo estático
Anulación del método significa definir un método en la clase secundaria que ya está definido en la clase principal con la misma firma de método, es decir, el mismo nombre, argumentos y tipo de retorno.
Mammal mammal = new Cat();
System.out.println(mammal.speak());
En la línea mammal.speak()
compilador dice que el método de tipo de referencia speak()
se llama a Mammal
, por lo que para el compilador esta llamada es Mammal.speak()
.
Pero en el momento de la ejecución, JVM sabe claramente que la referencia de mammal
es la referencia del objeto de Cat
, por lo que para JVM esta llamada es Cat.speak()
.
Debido a que la llamada de método se está resolviendo en tiempo de ejecución por JVM, por eso también se conoce como Polimorfismo de tiempo de ejecución y Despacho de método dinámico .
Diferencia entre la sobrecarga de métodos y la invalidación de métodos
Para obtener más detalles, puede leer Todo sobre la sobrecarga de métodos Vs Anulación de métodos .