Java 中继承和组合的区别
继承 : 当我们想要创建一个新的类,并且已经有一个类包含了我们想要的一些代码时,我们可以从现有的类中派生出我们的新类。这样,我们可以重用现有类的字段和方法,而不必自己编写它们。
子类从它的超类继承所有成员(字段、方法和嵌套类)。构造函数不是成员,所以它们不会被子类继承,但是超类的构造函数可以从子类中调用。
继承的类型有:
- 单一继承
- 多级继承
- 多重继承
- 混合遗传
- 分级继承
继承示例:
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 方法)的派生类。
组合 : 组合也提供了代码的可重用性,但这里的区别是我们没有为此扩展类。
构图示例: 我们以为例库。
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. | 这是一种**是-一种**关系。 | 而它是一个**有-一个**的关系。 |版权属于:月萌API www.moonapi.com,转载请注明出处