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

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos

Dominando la herencia en Java

Explora la herencia en Java en profundidad: comprende sus principios, ejemplos del mundo real y cómo aplicarla para código más limpio y reutilizable.

La herencia es una piedra angular de la programación orientada a objetos que te permite crear una nueva clase basada en una existente.

La clase derivada se llama subclase (hija o derivada), mientras que la clase que extiende es la superclase (padre o base). La palabra clave extends establece esta relación.

class Animal { // métodos y campos } class Perro extends Animal { // Perro hereda campos y métodos de Animal }

Aquí, Perro hereda todos los miembros de Animal —la subclase gana la funcionalidad del padre.


Ejemplo 1: Herencia básica

class Animal { String nombre; public void comer() { System.out.println("Puedo comer"); } } class Perro extends Animal { public void mostrar() { System.out.println("Mi nombre es " + nombre); } } class Main { public static void main(String[] args) { Perro labrador = new Perro(); labrador.nombre = "Rohu"; labrador.mostrar(); labrador.comer(); } }

Salida

Mi nombre es Rohu Puedo comer

En este ejemplo, Perro hereda nombre y comer() de Animal, por lo que un objeto Perro puede acceder a ellos directamente.

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos

La relación es-un

La herencia en Java representa una relación es-un: una subclase es una forma especializada de su superclase.

Estas jerarquías naturales justifican el uso de la herencia.


Sobrescritura de métodos

Cuando una subclase define un método con la misma firma que su superclase, el método de la subclase sobrescribe la versión de la superclase. Esto permite polimorfismo en tiempo de ejecución.

Ejemplo 2: Sobrescribiendo comer()

class Animal { public void comer() { System.out.println("Puedo comer"); } } class Perro extends Animal { @Override public void comer() { System.out.println("Como comida de perro"); } public void ladrar() { System.out.println("Puedo ladrar"); } } class Main { public static void main(String[] args) { Perro labrador = new Perro(); labrador.comer(); labrador.ladrar(); } }

Salida

Como comida de perro Puedo ladrar

La llamada a comer() en labrador resuelve al método sobrescrito en Perro.

Consejo: La anotación @Override es opcional pero altamente recomendada —asegura que el compilador verifique que efectivamente estás sobrescribiendo un método.

Usando super para acceder a la superclase

Al sobrescribir, la palabra clave super te permite invocar la implementación del padre.

Ejemplo 3: super en comer()

class Animal { public void comer() { System.out.println("Puedo comer"); } } class Perro extends Animal { @Override public void comer() { super.comer(); System.out.println("Como comida de perro"); } public void ladrar() { System.out.println("Puedo ladrar"); } } class Main { public static void main(String[] args) { Perro labrador = new Perro(); labrador.comer(); labrador.ladrar(); } }

Salida

Puedo comer Como comida de perro Puedo ladrar

Aquí, super.comer() llama al método definido en Animal antes de ejecutar la lógica de la subclase.

De forma similar, super puede invocar constructores de la superclase.


Miembros protected en herencia

Los campos o métodos marcados protected son accesibles para subclases independientemente del paquete.

Ejemplo 4: Accediendo a miembros protected

class Animal { protected String nombre; protected void mostrar() { System.out.println("Soy un animal."); } } class Perro extends Animal { public void obtenerInfo() { System.out.println("Mi nombre es " + nombre); } } class Main { public static void main(String[] args) { Perro labrador = new Perro(); labrador.nombre = "Rocky"; labrador.mostrar(); labrador.obtenerInfo(); } }

Salida

Soy un animal. Mi nombre es Rocky

La subclase puede leer y modificar libremente el campo protected nombre y llamar a mostrar().


¿Por qué usar herencia?


Tipos de herencia

Java soporta cinco modelos conceptuales de herencia —cada uno útil en diferentes escenarios.

1. Herencia simple

Una clase extiende solo una superclase.

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos

2. Herencia multinivel

Una subclase se convierte en la superclase de otra clase, creando una cadena.

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos

3. Herencia jerárquica

Múltiples subclases heredan de una sola superclase.

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos

4. Herencia múltiple

Java no permite que una clase extienda más de una clase, pero las interfaces proporcionan una forma de lograr este patrón.

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos
Nota: La herencia múltiple puede implementarse mediante interfaces; ver Java implements multiple inheritance.

5. Herencia híbrida

Una mezcla de dos o más tipos de herencia —por ejemplo, combinando herencia jerárquica y múltiple.

Dominando la herencia en Java: Conceptos, tipos y ejemplos prácticos

Java

  1. Dominando la herencia en C#: Conceptos, tipos y código práctico
  2. Herencia en C#: Construyendo código reutilizable y mantenible
  3. Palabra clave final en Java: Variables, métodos y clases
  4. Operador instanceof en Java: Guía completa
  5. Entendiendo las clases anidadas estáticas en Java: Uso, diferencias y ejemplos
  6. Dominando las clases internas anónimas en Java: Definición, sintaxis y ejemplos prácticos
  7. Patrón Singleton en Java explicado: Cómo implementarlo y usarlo de forma segura
  8. Dominando la Reflexión en Java: Inspeccionando clases, métodos y campos en tiempo de ejecución
  9. Dominando ObjectOutputStream de Java: Serialización, Métodos y Ejemplos Prácticos
  10. Dominando Java Generics: Construyendo Código Reutilizable y Type-Safe
  11. Dominando las operaciones de archivos en Java con java.io: creación, lectura, escritura y eliminación