La sobrecarga de métodos en Java con ejemplos:

La sobrecarga de metodo es una característica que permite que una clase tiene dos o más métodos que tienen mismo nombre, si sus listas de argumentos son diferentes.

Las listas de argumentos podrían diferir en:

1. Número de parámetros.

2. Los datos de parámetros.

3. Secuencia de tipo de datos de parámetros.

La sobrecarga de métodos también se conoce como polimorfismo estático.

Puntos a tener en cuenta:

1. El polimorfismo estático también se conoce como tiempo de compilación de unión o enlace anticipado.

2. unión estática ocurre en tiempo de compilación donde la unión de llamada a un método para su definición sucede en tiempo de compilación.

La sobrecarga de métodos ejemplos:

Ejemplo 1: Sobrecarga - distinto número de parámetros en la lista de argumentos

Cuando el nombre de los métodos son los mismos, pero el número de argumentos son diferentes.

class DisplayOverloading
{
    public void disp(char c)
    {
         System.out.println(c);
    }
    public void disp(char c, int num)  
    {
         System.out.println(c + " "+num);
    }
}
class Sample
{
   public static void main(String args[])
   {
       DisplayOverloading obj = new DisplayOverloading();
       obj.disp('a');
       obj.disp('a',10);
   }
}

Salida:

a

a 10

En el ejemplo anterior - disp () método ha sido sobrecargado con base en el número de argumentos - Tenemos dos definición de disp () método, uno con un argumento y otra con dos argumentos.

Ejemplo 2: Sobrecarga - Diferencia en el tipo de datos de los argumentos

En este ejemplo, disp () método está sobrecargado con base en el tipo de datos de los argumentos

class DisplayOverloading2
{
    public void disp(char c)
    {
        System.out.println(c);
    }
    public void disp(int c)
    {
       System.out.println(c );
    }
}

class Sample2
{
    public static void main(String args[])
    {
        DisplayOverloading2 obj = new DisplayOverloading2();
        obj.disp('a');
        obj.disp(5);
    }
}

Salida:

a

5

- Al igual que el ejemplo 1, aquí también, tenemos dos definición de disp () método, un argumento con carbón de leña y otro con el argumento int.

Ejemplo 3: Sobrecarga - Secuencia de tipo de datos de los argumentos

Aquí disp () método está sobrecargado basándose en la secuencia de tipo de datos de los argumentos - Tanto los métodos tienen diferentes secuencias de tipo de datos en la lista de argumentos. Primer método es tener lista de argumentos como (char, int) y el segundo está teniendo (int, char). Puesto que la secuencia es diferente, el método puede ser sobrecargado sin ningún problema.

class DisplayOverloading3
{
   public void disp(char c, int num)
   {
       System.out.println("I’m the first definition of method disp");
   }
   public void disp(int num, char c)
   {
       System.out.println("I’m the second definition of method disp" );
   }
}
class Sample3
{
   public static void main(String args[])
   {
       DisplayOverloading3 obj = new DisplayOverloading3();
       obj.disp('x', 51 );
       obj.disp(52, 'y');
   }
}

Salida:

I’m the first definition of method disp

I’m the second definition of method disp

Conceptos:

Método: Un método es una subrutina cuyo código es definido en una clase y puede pertenecer tanto a una clase, como es el caso de los métodos de clase o estáticos, como a un objeto, como es el caso de los métodos de instancia.

Argumento: Los argumentos son los valores actuales asignados a los parámetros variables cuando el subrutina es llamada.

Parámetros: Un parámetro es una propiedad intrínseca de un procedimiento.

Polimorfismo: El polimorfismo se refiere a la propiedad por la que es posible enviar mensajes sintácticamente iguales a objetos de tipos distintos.

Método primordial en Java con el ejemplo

La declaración de un método en la subclase que ya está presente en la clase de padres que se conoce como método primordial.

Ejemplo:

Uno de los ejemplo más simple - Aquí la clase Boy se extiende de la clase human. Tanto las clases tienen un vacío como el método  eat(). La clase Boy está dando su propia aplicación para el método de eat() o en otras palabras, se está anulando el método eat().

class Human{
   public void eat()
   {
      System.out.println("Human is eating");
   }
}
class Boy extends Human{
   public void eat(){
      System.out.println("Boy is eating");
   }
   public static void main( String args[]) {
      Boy obj = new Boy();
      obj.eat();
   }
}

Salida:

Boy is eating

Ventaja primordial del método

La principal ventaja primordial del método es que la clase puede dar su propia aplicación específica a un método heredado sin siquiera modificar la clase padre (clase base).

El reemplazo de métodos de envío método dinámico

La expedición del método dinámico es una técnica que nos permite asignar la referencia de clase base a un objeto de clase hijo.

class ABC{
   public void disp()
   {
      System.out.println("disp() method of parent class");
   }
   public void abc()
   {
      System.out.println("abc() method of parent class");
   }	   
}
class Test extends ABC{
   public void disp(){
      System.out.println("disp() method of Child class");
   }
   public void xyz(){
      System.out.println("xyz() method of Child class");
   }
   public static void main( String args[]) {
      //Referencia de clase de padres de niños objeto de clase
      ABC obj = new Test();
      obj.disp();
      obj.abc();
   }
}

Salida:

disp() method of Child class

abc() method of parent class

En el ejemplo anterior, el objeto obj fue capaz de llamar a la disp () (método de alteración temporal) y ABC () (método no sustituida del clase base). Sin embargo, si se intenta llamar al método XYZ () (que ha sido declarada recientemente en la clase de prueba) [obj.xyz ()] entonces se daría error de compilación con el siguiente mensaje:

Excepción en el hilo java.lang.Error "main": compilación sin resolver problema: El método XYZ () está definido para el tipo ABC.

1.      lista de argumentos: La lista de argumentos del método primordial debe ser la misma que la del método de la clase padre. Los tipos de datos de los argumentos y su secuencia deben mantenerse, ya que es en el método de primer orden.

2.      Modificador de acceso: El modificador de acceso del método de alteración temporal (método de la subclase) no puede ser más restrictivo que el método reemplazado de la clase padre.

Por ejemplo, Esto no está permitido como método disp clase hija es más restrictivo (protegida) de la clase base (público).

class MyBaseClass{
   public void disp()
   {
       System.out.println("Parent class method");
   }
}
class MyChildClass extends MyBaseClass{
   protected void disp(){
      System.out.println("Child class method");
   }
   public static void main( String args[]) {
      MyChildClass obj = new MyChildClass();
      obj.disp();
   }
}

Salida:

Excepción en el hilo java.lang.Error "principal": compilación sin resolver problema: No se puede reducir la visibilidad del método heredado de una clase base.

Sin embargo, este escenario es perfectamente válido como pública es menos restrictiva que protegida.

class MyBaseClass{
   protected void disp()
   {
       System.out.println("Parent class method");
   }
}
class MyChildClass extends MyBaseClass{
   public void disp(){
      System.out.println("Child class method");
   }
   public static void main( String args[]) {
      MyChildClass obj = new MyChildClass();
      obj.disp();
   }
}

Salida:

Child class method

1.      métodos privados, estáticas y finales no se pueden sustituir, ya que son locales a la clase.

2.      el reemplazo de métodos (método de la clase hija) puede lanzar excepciones sin control, independientemente de si el método reemplazado (método de la clase padre) lanza cualquier excepción o no.

3.      La unión de métodos sustituidos suceda en tiempo de ejecución que se conoce como enlace dinámico.

4.      Si una clase está extendiendo una clase abstracta o implementar una interfaz, entonces tiene que reemplazar todos los métodos abstractos menos que la clase en sí es una clase abstracta.

La palabra clave super en Anulación

súper palabra clave se utiliza para llamar a la clase principal método / constructor. super.methodname () llama al método especificado de clase base, mientras que super () llama al constructor de la clase base. Vamos a ver el uso de súper en orden.

class ABC{
   public void mymethod()
   {
       System.out.println("Class ABC: mymethod()");
   }	   
}
class Test extends ABC{
   public void mymethod(){
      //This will call the mymethod() of parent class
      super.mymethod();
      System.out.println("Class Test: mymethod()");
   }
   public static void main( String args[]) {
      Test obj = new Test();
      obj.mymethod();
   }
}

Salida:

Class ABC: mymethod()

Class Test: mymethod()