日喀则市网站建设_网站建设公司_数据统计_seo优化
2026/1/16 23:35:44 网站建设 项目流程

Java组合

组合Composition和组合和继承的关系:
另一种 实现“代码复用”——组合。
相较于继承,组合更加灵活。继承一个子类只有一个直接父类,而组合就可以解决这个问题。
组合是区别于继承的另一种代码复用机制。
本质是类A将类B的对象作为自己的属性形成新的组合,通过该属性使用类B的属性和方法。
场景:
在对真实世界建模方面,适合于“has-a”关系,如车子有引擎、电脑包含CPU、存储器、显示器等关系。
实现:
1.基本组合 实现
在类信息代码里,声明持有组件对象
在类的构造器里,创建组件(创建被组合类的对象),如
`
// Java300集 例子
// 可用组合重写继承,注意组合并不要求类之间存在继承关系
public class Demo3_inherit_2_composition {
public static void main(String[] args) {
Student s = new Student("高小七",172,"Java");
s.study();// 调用成员方法

}

}
class Person {
private String name;
private int height;

public Person(String name, int height) {this.name = name;this.height = height;
}public void rest() {System.out.println("光学习不玩耍,聪敏的杰克也变傻!");
}

}
class Student{
private String major;
private Person p;// Person类将作为一个属性,其属性,方法都可以依此调用

public Student(String name,int height,String major) {this.p = new Person(name,height);this.major = major;}
public void study() {System.out.println("好好学习,天天向上!");p.rest();
}

}
`
Java组合可以算作一种多继承方法,但相较于C++的多继承,其耦合度要更低
而且,组合允许通过定义方法来更换组件(另一优势?),如

`
// 组合
// 电脑:内存,CPU
// 良好的封装:创建对象的过程 放在了组合类的构造器里;即在组合类的构造器里 通过 调用旧类的构造器 来初始化组合类
class Memories {
private String size;

public Memories(String size) {this.size = size;
}public void store(){System.out.println(size+"存储器正在存储数据——");
}

}
class CPU {
private String speed;

public CPU(String speed) {this.speed = speed;
}public void run(){System.out.println(speed+"CPU正在平稳运行!");
}

}
class Computer {
// 持有对象组件
private CPU cpu;
private Memories m;

public Computer(String size, String speed) {// 创建对象组件this.cpu = new CPU(speed);this.m = new Memories(size);
}
public void start() {System.out.println("开机中。。。");cpu.run();// Person类将作为一个属性,其属性√,方法√都可以依此调用m.store();System.out.println("开机成功!");
}
// 在方法里更换组件?道理很简单。对于对象c来说,经历初始化(第一次构造器赋值),对象m和cpu被创建,
// 之后调用方法更新c的属性(这里是创建新m对象)
public void change(String size) {this.m = new Memories(size);System.out.println("...内存条更换成功!");
}

}
public class Demo3_inherit_3 {
public static void main(String[] args) {
Computer pc = new Computer("512GB","咻——!");
pc.start();

    pc.change("1TB");pc.start();
}

}
`
对现实进行建模。"is-a"建议继承,"has-a"建议组合.

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询