当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Inheritance和Composition的区别用法及代码示例


继承
当我们想要创建一个新类并且已经有一个类包含我们想要的一些代码时,我们可以从现有类派生新类。这样做,我们可以重用现有类的字段和方法,而不必自己编写它们。

子类从其超类继承所有成员(字段、方法和嵌套类)。构造函数不是成员,因此不能被子类继承,但可以从子类调用超类的构造函数。

继承的类型有:

  1. 单一继承
  2. Multi-level继承
  3. 多重继承
  4. 混合继承
  5. 层次继承

继承示例:

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);
    }
}

输出:

addition of a+b is:11 

这里,类B是派生类,继承了基类A的属性(add方法)。

作品
该组合还提供了代码可重用性,但这里的区别是我们不为此扩展类。

组成示例:
让我们举个例子 Library

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);
        }
    }
}

输出:

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

继承和组合之间的区别:

S.NO 继承 作品
1. 在继承中,我们定义要继承的类(超类),最重要的是它不能在运行时更改 而在组合中,我们只定义一个我们想要使用的类型,它可以保存其不同的实现,也可以在运行时更改。因此,组合比继承灵活得多。
2. 这里我们只能扩展一个类,换句话说,不能扩展多个类,因为java不支持多重继承。
而组合允许使用不同类的函数。
3. 在继承中,我们需要父类来测试子类。 组合允许独立于父类或子类来测试我们正在使用的类的实现。
4. 继承不能扩展最终类。 而组合甚至允许从最终类重用代码。
5. 它是一个is-a关系。 虽然它是一个has-a关系。


相关用法


注:本文由纯净天空筛选整理自Pragya_Chaurasia大神的英文原创作品 Difference between Inheritance and Composition in Java。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。