集团官网
  • 国家级全民数字素养与技能培训基地
  • 河南省第一批产教融合型企业建设培育单位
  • 郑州市数字技能人才(码农)培养评价联盟

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

编辑:云和数据 日期:2023-05-25 09:03

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

相关内容

抢先一步 鸿蒙(HarmonyOS)应用开发者高级认证 免费考! 适合人群计算机相关专业在校生(技师、中职、高职、本科、研究生)对鸿蒙(HarmonyOS)有兴趣的非计算机相关专业在校生目前正在从事移动应用的开发者目前正在从事计算机行业相关的人计算机专业高校老师所有对鸿蒙(HarmonyOS)有兴趣的人 培训方案掌握鸿蒙的核心概念和端云一体化开发、... 什么是Java的多态性(polymorphism)?它有哪些不同的形式? 多态性是Java面向对象编程的一个重要概念,它允许不同的对象以一致的方式响应同一个方法调用,具体表现为对象在运行时可以表现出多个不同的形态。多态性主要有两种不同的形式:编译时多态性(静态多态性)和运行时多态性(动态多态性)。1. 编译时多态性(静态多态性):   ... 如何学习和搭建Hadoop开发环境? Hadoop是大数据处理领域的重要平台,能够处理和分析大量数据。为了有效地利用Hadoop,我们需要学习其基础知识,并正确搭建开发环境。下面是详细的学习和搭建指南。一、学习Hadoop基础掌握基础概念和原理Hadoop主要由HDFS和MapReduce两部分组成。HDFS是分布式文件系统,Ma... UI 设计学习如何进阶成为高手 我总结了六种方法,帮助你走出舒适区,提高技能,成长为自信且经验丰富的UI设计高手一位经验丰富的 UI 设计师,往往十分看中应用程序界面的吸引力和视觉刺激,确保满足用户期望和需求。但是,如果你已经在 UI 设计圈摸爬滚打多年,仍然没有出色的作品,那你极有可能是因为陷入了一个舒适圈,UI技能一直原... 在Java中Executor和Executors的区别? 在Java中,Executor和Executors都与线程池和并发执行有关,但它们是不同的概念和类。1.ExecutorExecutor是一个接口,位于java.util.concurrent包中,用于表示一个执行任务的执行器。它只定义了一个方法:void execute(Runnable c... String类型的常见命令有哪些? String类型,也就是字符串类型,是Redis中最简单的存储类型。其value是字符串,不过根据字符串的格式不同,又可以分为3类:string是普通字符串,int整数类型,可以做自增、自减操作,float浮点类型,可以做自增、自减操作。String的常见命令有:SET:添加或者修改已经存在的...