Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Java

Java - Herencia

La herencia se puede definir como el proceso en el que una clase adquiere las propiedades (métodos y campos) de otra. Con el uso de la herencia, la información se hace manejable en un orden jerárquico.

La clase que hereda las propiedades de otra se conoce como subclase (clase derivada, clase secundaria) y la clase cuyas propiedades se heredan se conoce como superclase (clase base, clase principal).

extiende palabra clave

extiende es la palabra clave utilizada para heredar las propiedades de una clase. La siguiente es la sintaxis de la palabra clave extends.

Sintaxis

class Super {
   .....
   .....
}
class Sub extends Super {
   .....
   .....
}

Código de muestra

El siguiente es un ejemplo que demuestra la herencia de Java. En este ejemplo, puede observar dos clases, a saber, Calculation y My_Calculation.

Usando la palabra clave extends, My_Calculation hereda los métodos added() y Subtraction() de la clase Calculation.

Copie y pegue el siguiente programa en un archivo con el nombre My_Calculation.java

Ejemplo

Demostración en vivo
class Calculation {
   int z;
	
   public void addition(int x, int y) {
      z = x + y;
      System.out.println("The sum of the given numbers:"+z);
   }
	
   public void Subtraction(int x, int y) {
      z = x - y;
      System.out.println("The difference between the given numbers:"+z);
   }
}

public class My_Calculation extends Calculation {
   public void multiplication(int x, int y) {
      z = x * y;
      System.out.println("The product of the given numbers:"+z);
   }
	
   public static void main(String args[]) {
      int a = 20, b = 10;
      My_Calculation demo = new My_Calculation();
      demo.addition(a, b);
      demo.Subtraction(a, b);
      demo.multiplication(a, b);
   }
}

Compile y ejecute el código anterior como se muestra a continuación.

javac My_Calculation.java
java My_Calculation

Después de ejecutar el programa, producirá el siguiente resultado −

Salida

The sum of the given numbers:30
The difference between the given numbers:10
The product of the given numbers:200

En el programa dado, cuando un objeto a My_Calculation se crea una clase, se hace una copia del contenido de la superclase dentro de ella. Por eso, usando el objeto de la subclase puedes acceder a los miembros de una superclase.

La variable de referencia de la superclase puede contener el objeto de la subclase, pero al usar esa variable solo puede acceder a los miembros de la superclase, por lo que para acceder a los miembros de ambas clases se recomienda crear siempre una variable de referencia para la subclase.

Si considera el programa anterior, puede crear una instancia de la clase como se indica a continuación. Pero usando la variable de referencia de la superclase ( cal en este caso) no puede llamar al método multiplicación() , que pertenece a la subclase My_Calculation.

Calculation demo = new My_Calculation();
demo.addition(a, b);
demo.Subtraction(a, b);

Nota − Una subclase hereda todos los miembros (campos, métodos y clases anidadas) de su superclase. Los constructores no son miembros, por lo que las subclases no los heredan, pero el constructor de la superclase se puede invocar desde la subclase.

La súper palabra clave

El súper la palabra clave es similar a esto palabra clave. Los siguientes son los escenarios en los que se utiliza la palabra clave super.

Diferenciación de los miembros

Si una clase hereda las propiedades de otra clase. Y si los miembros de la superclase tienen los mismos nombres que la subclase, para diferenciar estas variables usamos la palabra clave super como se muestra a continuación.

super.variable
super.method();

Código de muestra

Esta sección le proporciona un programa que demuestra el uso del super palabra clave.

En el programa dado, tiene dos clases, a saber, Sub_class y Super_clase , ambos tienen un método llamado display() con diferentes implementaciones y una variable llamada num con diferentes valores. Estamos invocando el método display() de ambas clases e imprimiendo el valor de la variable num de ambas clases. Aquí puede observar que hemos usado la palabra clave super para diferenciar los miembros de la superclase de la subclase.

Copie y pegue el programa en un archivo con el nombre Sub_class.java.

Ejemplo

Demostración en vivo
class Super_class {
   int num = 20;

   // display method of superclass
   public void display() {
      System.out.println("This is the display method of superclass");
   }
}

public class Sub_class extends Super_class {
   int num = 10;

   // display method of sub class
   public void display() {
      System.out.println("This is the display method of subclass");
   }

   public void my_method() {
      // Instantiating subclass
      Sub_class sub = new Sub_class();

      // Invoking the display() method of sub class
      sub.display();

      // Invoking the display() method of superclass
      super.display();

      // printing the value of variable num of subclass
      System.out.println("value of the variable named num in sub class:"+ sub.num);

      // printing the value of variable num of superclass
      System.out.println("value of the variable named num in super class:"+ super.num);
   }

   public static void main(String args[]) {
      Sub_class obj = new Sub_class();
      obj.my_method();
   }
}

Compile y ejecute el código anterior usando la siguiente sintaxis.

javac Super_Demo
java Super

Al ejecutar el programa, obtendrá el siguiente resultado −

Salida

This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20

Constructor de superclase de invocación

Si una clase hereda las propiedades de otra clase, la subclase adquiere automáticamente el constructor predeterminado de la superclase. Pero si desea llamar a un constructor parametrizado de la superclase, debe usar la palabra clave super como se muestra a continuación.

super(values);

Código de muestra

El programa dado en esta sección demuestra cómo usar la palabra clave super para invocar el constructor parametrizado de la superclase. Este programa contiene una superclase y una subclase, donde la superclase contiene un constructor parametrizado que acepta un valor entero, y usamos la palabra clave super para invocar el constructor parametrizado de la superclase.

Copie y pegue el siguiente programa en un archivo con el nombre Subclass.java

Ejemplo

Demostración en vivo
class Superclass {
   int age;

   Superclass(int age) {
      this.age = age; 		 
   }

   public void getAge() {
      System.out.println("The value of the variable named age in super class is: " +age);
   }
}

public class Subclass extends Superclass {
   Subclass(int age) {
      super(age);
   }

   public static void main(String args[]) {
      Subclass s = new Subclass(24);
      s.getAge();
   }
}

Compile y ejecute el código anterior usando la siguiente sintaxis.

javac Subclass
java Subclass

Al ejecutar el programa, obtendrá el siguiente resultado −

Salida

The value of the variable named age in super class is: 24

Relación ES-A

IS-A es una forma de decir:Este objeto es un tipo de ese objeto. Veamos cómo se extiende el palabra clave se utiliza para lograr la herencia.

public class Animal {
}

public class Mammal extends Animal {
}

public class Reptile extends Animal {
}

public class Dog extends Mammal {
}

Ahora, según el ejemplo anterior, en términos orientados a objetos, lo siguiente es cierto −

Ahora, si consideramos la relación IS-A, podemos decir −

Con el uso de la palabra clave extends, las subclases podrán heredar todas las propiedades de la superclase excepto las propiedades privadas de la superclase.

Podemos asegurar que Mammal es en realidad un Animal con el uso del operador de instancia.

Ejemplo

Demostración en vivo
class Animal {
}

class Mammal extends Animal {
}

class Reptile extends Animal {
}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Animal a = new Animal();
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Esto producirá el siguiente resultado −

Salida

true
true
true

Dado que tenemos una buena comprensión de las extensiones palabra clave, veamos cómo implementa La palabra clave se utiliza para obtener la relación IS-A.

Generalmente, los implementos La palabra clave se usa con clases para heredar las propiedades de una interfaz. Las interfaces nunca pueden ser extendidas por una clase.

Ejemplo

public interface Animal {
}

public class Mammal implements Animal {
}

public class Dog extends Mammal {
}

La instancia de la palabra clave

Usemos la instancia de operador para verificar si el mamífero es en realidad un animal y el perro es en realidad un animal.

Ejemplo

Demostración en vivo
interface Animal{}
class Mammal implements Animal{}

public class Dog extends Mammal {

   public static void main(String args[]) {
      Mammal m = new Mammal();
      Dog d = new Dog();

      System.out.println(m instanceof Animal);
      System.out.println(d instanceof Mammal);
      System.out.println(d instanceof Animal);
   }
}

Esto producirá el siguiente resultado −

Salida

true
true
true

Tiene una relación

Estas relaciones se basan principalmente en el uso. Esto determina si una cierta clase TIENE-A cierta cosa. Esta relación ayuda a reducir la duplicación de código y los errores.

Veamos un ejemplo −

Ejemplo

public class Vehicle{}
public class Speed{}

public class Van extends Vehicle {
   private Speed sp;
} 

Esto demuestra que la clase Van HAS-A Speed. Al tener una clase separada para Speed, no tenemos que poner todo el código que pertenece a speed dentro de la clase Van, lo que hace posible reutilizar la clase Speed ​​en múltiples aplicaciones.

En la función orientada a objetos, los usuarios no necesitan preocuparse por qué objeto está haciendo el trabajo real. Para lograr esto, la clase Van oculta los detalles de implementación de los usuarios de la clase Van. Entonces, básicamente, lo que sucede es que los usuarios le piden a la clase Van que realice una determinada acción y la clase Van hará el trabajo por sí misma o le pedirá a otra clase que realice la acción.

Tipos de herencia

Hay varios tipos de herencia como se demuestra a continuación.

Un hecho muy importante para recordar es que Java no admite la herencia múltiple. Esto significa que una clase no puede extenderse a más de una clase. Por lo tanto seguir es ilegal −

Ejemplo

public class extends Animal, Mammal{} 

Sin embargo, una clase puede implementar una o más interfaces, lo que ha ayudado a Java a deshacerse de la imposibilidad de la herencia múltiple.


Java

  1. Herencia de C#
  2. Palabra clave final de Java
  3. Operador de instancia de Java
  4. Clase estática anidada de Java
  5. Clase anónima de Java
  6. Clase única de Java
  7. Reflexión Java
  8. Clase Java ObjectOutputStream
  9. Genéricos de Java
  10. Clase de archivo Java
  11. C# - Herencia