在Java中,继承(inheritance)和聚合(aggregation)是两种不同的对象关系。它们在代码实现和语义上有所不同。
继承是一种对象之间的关系,其中一个类(子类)继承另一个类(父类)的属性和方法。子类可以重用父类的代码,并可以添加新的属性和方法。继承是一种”is-a”(是一个)关系,其中子类是父类的一种特殊类型。在Java中,使用关键字extends来实现继承。
聚合是一种对象关系,其中一个类(整体)包含另一个类(部分)作为其成员变量。部分对象可以独立存在,并且可以与多个整体对象相关联。聚合是一种”has-a”(有一个)关系,其中整体对象包含部分对象。在Java中,可以通过将部分对象声明为整体对象的成员变量来实现聚合关系。
下面是一个简单的代码示例,演示了继承和聚合的区别:
// 父类class Vehicle { protected String brand; public Vehicle(String brand) { this.brand = brand; } public void start() { System.out.println("Starting the vehicle"); }}// 子类继承父类class Car extends Vehicle { private int numberOfSeats; public Car(String brand, int numberOfSeats) { super(brand); this.numberOfSeats = numberOfSeats; } public void drive() { System.out.println("Driving the car"); }}// 部分类class Engine { public void start() { System.out.println("Starting the engine"); }}// 整体类包含部分对象class Car2 { private String brand; private Engine engine; public Car2(String brand, Engine engine) { this.brand = brand; this.engine = engine; } public void start() { engine.start(); System.out.println("Starting the car"); }}public class Main { public static void main(String[] args) { // 继承示例 Car car = new Car("Toyota", 4); car.start(); // 调用继承自父类的方法 car.drive(); // 调用子类的方法 System.out.println(); // 聚合示例 Engine engine = new Engine(); Car2 car2 = new Car2("Toyota", engine); car2.start(); // 调用整体对象的方法,并使用部分对象的方法 }}
在上述示例中,Car类通过继承Vehicle类获得了start方法,并添加了自己的drive方法。而Car2类使用聚合关系,将Engine对象作为成员变量,通过调用整体对象的start方法,间接调用了部分对象的start方法。