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:
- herencia única
- Herencia multinivel
- herencias multiples
- herencia híbrida
- 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