IT培训-高端面授IT培训机构
云和教育:云和数据集团高端IT职业教育品牌 全国咨询热线:0371-67988003
课程 请选择课程
    校区 请选择校区
      • 华为
        授权培训中心
      • 腾讯云
        一级认证培训中心
      • 百度营销大学
        豫陕深授权运营中心
      • Oracle甲骨文
        OAEP中心
      • Microsoft Azure
        微软云合作伙伴
      • Unity公司
        战略合作伙伴
      • 普华基础软件
        战略合作伙伴
      • 新开普(股票代码300248)
        旗下丹诚开普投资
      • 中国互联网百强企业锐之旗
        旗下锐旗资本投资

      Java中继承与聚合的区别是什么?

      • 发布时间:
        2023-05-25
      • 版权所有:
        云和教育
      • 分享:

      在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方法。