Diferentes técnicas de reutilización de nombres en Java

Anulación Un método de instancia anula todos los métodos de instancia accesibles con la misma firma en las superclases, lo que permite el envío dinámico; en otras palabras, la máquina virtual elige qué anulación invocar en función del tipo de tiempo de ejecución de una instancia. La anulación es fundamental para la programación orientada a objetos y es la única forma de reutilización de nombres que generalmente no se desaconseja:

Java

// Base Class
class Base {
public void f()
{ }
}
 
// Derived Class
class Derived extends Base {
 
// overrides Base.f()
public void f()
{ }
}

Ocultar un campo, método estático o tipo de miembro oculta todos los campos accesibles, métodos estáticos o tipos de miembro, respectivamente, con el mismo nombre (o, para métodos, firma) en supertipos. Ocultar un miembro evita que se herede: 

Java

// Base class
class Base {
   public static void f()
   { }
}
 
// Derived class
class Derived extends Base {
 
   // hides Base.f()
   public static void f()
   { }
}

Sobrecarga Los métodos en una clase se sobrecargan entre sí si tienen el mismo nombre y firmas diferentes. El método sobrecargado designado por una invocación se selecciona en tiempo de compilación: 

Java

// Base class
class GeeksForGeeks {
 
   // int overloading
   public void f(int i)
   { }
  
   // String overloading
   public void f(String s)
   { }
}

Sombreado Una variable, método o tipo sombrea todas las variables, métodos o tipos, respectivamente, con el mismo nombre en un ámbito textualmente envolvente. Si una entidad está sombreada, no puede referirse a ella por su nombre simple; dependiendo de la entidad, no puede referirse a ella en absoluto: 

Java

// Base class
class GeeksForGeeks {
 
static String sentence = "I don’t know.";
 
  public static void main(String[] args) {
 
     // shadows static field
     String sentence = "I know!";
 
     // prints local variable
     System.out.println(sentence);
  }
}

Aunque generalmente se desaconseja el sombreado, un idioma común implica el sombreado. Los constructores suelen reutilizar un nombre de campo de su clase como nombre de parámetro para pasar el valor del campo con nombre. Esta expresión no está exenta de riesgos, pero la mayoría de los programadores de Java han decidido que los beneficios estilísticos superan los riesgos:

Java

class Shirt {
   private final int size;
 
   // Parameter shadows Shirt.size
   public Shirt(int size) {
     this.size = size;
   }
}

Obscuring Una variable oscurece un tipo con el mismo nombre si ambos están en el alcance: si el nombre se usa donde se permiten variables y tipos, se refiere a la variable. De manera similar, una variable o un tipo pueden ocultar un paquete. El oscurecimiento es el único tipo de reutilización de nombres donde los dos nombres están en diferentes espacios de nombres: variables, paquetes, métodos o tipos. Si un tipo o paquete está oculto, no puede referirse a él por su nombre simple excepto en un contexto donde la sintaxis solo permite un nombre de su espacio de nombres. Cumplir con las convenciones de nomenclatura elimina en gran medida el oscurecimiento 

Java

public class Obscure {
 
  // Obscures type java.lang.System
  static String System;
 
  public static void main(String[] args) {
 
     // Next line won’t compile:
     // System refers to static field
     System.out.println("hello, obscure world!");
  }
}

Publicación traducida automáticamente

Artículo escrito por shubhamjuneja11 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *