sobreescritura sobrecargar sobrecargados sobrecarga polimorfismo metodos metodo estatico ejercicios constructores conclusion java

sobrecargados - sobrecargar metodo estatico java



¿Por qué se necesita la sobrecarga de métodos y la sustitución en Java? (3)

De doc
Método de sobrecarga: suponga que tiene una clase que puede usar la caligrafía para dibujar varios tipos de datos (cadenas, enteros, etc.) y que contiene un método para dibujar cada tipo de datos. Es incómodo usar un nuevo nombre para cada método, por ejemplo, drawString, drawInteger, drawFloat, etc. En el lenguaje de programación Java, puede usar el mismo nombre para todos los métodos de dibujo, pero pase una lista de argumentos diferente a cada método. Por lo tanto, la clase de dibujo de datos podría declarar cuatro métodos llamados draw, cada uno de los cuales tiene una lista de parámetros diferente.

public class DataArtist { ... public void draw(String s) { ... } public void draw(int i) { ... } public void draw(double f) { ... } public void draw(int i, double f) { ... } }

Los métodos sobrecargados se diferencian por el número y el tipo de los argumentos pasados ​​al método. En el ejemplo de código, draw(String s) y draw(int i) son métodos distintos y únicos porque requieren diferentes tipos de argumentos.

No puede declarar más de un método con el mismo nombre y el mismo número y tipo de argumentos, porque el compilador no puede diferenciarlos.

El compilador no considera el tipo de retorno al diferenciar los métodos, por lo que no puede declarar dos métodos con la misma firma, incluso si tienen un tipo de retorno diferente.

La anulación de métodos , en la programación orientada a objetos, es una característica del lenguaje que permite a una subclase o clase secundaria proporcionar una implementación específica de un método que ya proporciona una de sus superclases o clases primarias. La implementación en la subclase anula (reemplaza) la implementación en la superclase al proporcionar un método que tiene el mismo nombre, el mismo parámetro o firma y el mismo tipo de retorno que el método en la clase primaria. La versión de un método que se ejecuta estará determinada por el objeto que se utiliza para invocarlo. Si se utiliza un objeto de una clase principal para invocar el método, entonces se ejecutará la versión de la clase principal, pero si se usa un objeto de la subclase para invocar el método, entonces se ejecutará la versión de la clase secundaria.

Posible duplicado:
Polimorfismo vs Anulación vs Sobrecarga

Estoy luchando para saber por qué la sobrecarga de métodos y la invalidación son necesarias en Java.

He leído algunos artículos sobre este tema pero no puedo entender por qué se necesita prácticamente.

También visité la siguiente url en stackoverflow pero aún no estoy claro en este tema.

Sobrecarga y anulación de Java

Cualquier ejemplo práctico será apreciado.

Gracias por adelantado.


La respuesta se centra principalmente en el uso de interface y abstract class .

Digamos que tienes un bloque de código:

abstract class testAbstract { int a; int b; int c; public String testFunction() { System.out.println("Override me!"); return "default"; } public void setValuesByFormula(double a, double b) { System.out.println("No formula set!"); } }

Este no es el ejemplo de la apuesta, pero digamos que está destinado a permitir que el usuario establezca a , b y c partir de una fórmula. El usuario desea crear una nueva instancia de esto:

class testClass extends testAbstract { }

La clase testClass actualmente contiene ... nada. Pero amplía testAbstract y, por lo tanto, tiene una función setValuesByFormula . Sin embargo, cuando el usuario intenta llamar a esto, el sistema emite el mensaje: ¡ No formula set!

Lo que el usuario debe hacer en este momento es @Override la función original. Así, la nueva clase se convierte en:

class testClass extends testInterface { public void setValuesByFormula(double a, double b) { //A not really relevant formula goes here. } }

Esto detiene el mensaje ¡ No formula set! como el usuario ha creado su propia fórmula. Esto es necesario por un par de razones principales:

  1. Si una función se hereda de una superclase, a menudo el niño querrá anular esa función. Sin embargo, la superclase puede tener un código predeterminado para su clase. Por lo tanto, el usuario debe anular esta función si desea utilizar su propio código.
  2. A menudo, las superclases quieren asegurarse con un código predeterminado que una función determinada volverá sin errores. También hay otros casos en los que el código predeterminado es útil. Por lo tanto, esto proporciona una alternativa: si el usuario no necesita el código predeterminado, puede anularlo.

Primordial

Java Docs dice:

Un método de instancia en una subclase con la misma firma (nombre, más el número y el tipo de sus parámetros) y el tipo de retorno como método de instancia en la superclase anula el método de la superclase.

La capacidad de una subclase para anular un método permite a una clase heredar de una superclase cuyo comportamiento es "lo suficientemente cercano" y luego modificar el comportamiento según sea necesario.

La anulación es una función que está disponible al usar la herencia.

Se utiliza cuando una clase que se extiende desde otra clase quiere usar la mayoría de las características de la clase principal y desea implementar una funcionalidad específica en ciertos casos.

En tales casos, podemos crear métodos con el mismo nombre y firma que en la clase principal. De esta manera, el nuevo método enmascara el método principal y se invoca de forma predeterminada.

class Thought { public void message() { System.out.println("I feel like I am diagonally parked in a parallel universe."); } } public class Advice extends Thought { @Override // @Override annotation in Java 5 is optional but helpful. public void message() { System.out.println("Warning: Dates in calendar are closer than they appear."); } }

doc

La sobrecarga en Java es la capacidad de crear múltiples métodos del mismo nombre, pero con diferentes parámetros.

La principal ventaja de esto es la limpieza del código.

Tomemos el método String.valueOf . Las versiones sobrecargadas de este método se definen como:

static String valueOf(boolean b) static String valueOf(char c) static String valueOf(char[] data) static String valueOf(char[] data, int offset, int count) static String valueOf(double d) static String valueOf(float f) static String valueOf(int i) static String valueOf(long l) static String valueOf(Object obj)

Esto significa que si tenemos cualquier tipo de variable, podemos obtener una representación de String usando String.valueOf(variable) .

Si no se permitiera la sobrecarga, tendríamos métodos como este ...

static String valueOfBoolean(boolean b) static String valueOfChar(char c) static String valueOfCharArray(char[] data) static String valueOfCharArrayWithOffset(char[] data, int offset, int count) static String valueOfDouble(double d) static String valueOfFloat(float f) static String valueOfInt(int i) static String valueOfLong(long l) static String valueOfObject(Object obj)

... lo que es muy feo y más difícil de leer que la solución sobrecargada.