Diferencia entre herencia y composición en Java

Herencia : 
cuando queremos crear una nueva clase y ya hay una clase que incluye parte del código que queremos, podemos derivar nuestra nueva clase de la clase existente. Al hacer esto, podemos reutilizar los campos y métodos de la clase existente sin tener que escribirlos nosotros mismos.

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.

Los tipos de herencia son: 

  1. herencia única
  2. Herencia multinivel
  3. herencias multiples
  4. herencia híbrida
  5. herencia jerárquica

Ejemplo de Herencia: 

Java

class A {
    int a, b;
    public void add(int x, int y)
    {
        a = x;
        b = y;
        System.out.println(
            "addition of a + b is:"
            + (a + b));
    }
}
 
class B extends A {
    public void sum(int x, int y)
    {
        add(x, y);
    }
 
    // Driver Code
    public static void main(String[] args)
    {
        B b1 = new B();
        b1.sum(5, 6);
    }
}

Producción: 

addition of a+b is:11 

Aquí, la clase B es la clase derivada que hereda la propiedad ( método de adición ) de la clase base A.

Composición : 
la composición también proporciona reutilización de código, pero la diferencia aquí es que no extendemos la clase para esto.

Ejemplo de Composición: 
Tomemos un ejemplo de la Biblioteca

Java

// Java program to illustrate
// the concept of Composition
 
import java.io.*;
import java.util.*;
 
// class book
class Book {
 
    public String title;
    public String author;
 
    Book(String title, String author)
    {
 
        this.title = title;
        this.author = author;
    }
}
 
// Library class contains
// list of books.
class Library {
 
    // reference to refer to the list of books.
    private final List<Book> books;
 
    Library(List<Book> books)
    {
        this.books = books;
    }
 
    public List<Book> getTotalBooksInLibrary()
    {
 
        return books;
    }
}
 
// main method
class GFG {
    public static void main(String[] args)
    {
 
        // Creating the Objects of Book class.
        Book b1 = new Book(
            "EffectiveJ Java",
            "Joshua Bloch");
        Book b2 = new Book(
            "Thinking in Java",
            "Bruce Eckel");
        Book b3 = new Book(
            "Java: The Complete Reference",
            "Herbert Schildt");
 
        // Creating the list which contains the
        // no. of books.
        List<Book> books = new ArrayList<Book>();
        books.add(b1);
        books.add(b2);
        books.add(b3);
 
        Library library = new Library(books);
 
        List<Book> bks = library.getTotalBooksInLibrary();
        for (Book bk : bks) {
 
            System.out.println("Title : "
                               + bk.title + " and "
                               + " Author : "
                               + bk.author);
        }
    }
}

Producción:

Title : EffectiveJ Java and  Author : Joshua Bloch
Title : Thinking in Java and  Author : Bruce Eckel
Title : Java: The Complete Reference and  Author : Herbert Schildt

Diferencia entre herencia y composición:

S.NO Herencia Composición
1. En la herencia, definimos la clase que heredamos (superclase) y, lo que es más importante, no se puede cambiar en tiempo de ejecución. Mientras que en la composición solo definimos un tipo que queremos usar y que puede contener su implementación diferente, también puede cambiar en tiempo de ejecución. Por lo tanto, la Composición es mucho más flexible que la Herencia.
2. Aquí solo podemos extender una clase, en otras palabras, no se puede extender más de una clase ya que Java no admite la herencia múltiple. 
 
Mientras que la composición permite usar funcionalidades de diferentes clases.
3. En la herencia, necesitamos la clase principal para probar la clase secundaria. La composición permite probar la implementación de las clases que estamos usando independientemente de la clase principal o secundaria.
4. La herencia no puede extender la clase final. Mientras que la composición permite la reutilización de código incluso de las clases finales.
5. Es una relación es-un . Si bien es una relación de tener una relación.

Publicación traducida automáticamente

Artículo escrito por Pragya_Chaurasia 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 *