Composition (การประกอบ) เป็นเทคนิคการออกแบบที่คลาสของคุณสามารถมีอินสแตนซ์ของอีกคลาสหนึ่งเป็นฟิลด์ของคลาสคุณ Inheritance (การสืบทอด) เป็นกลไกที่ออบเจ็กต์หนึ่งสามารถได้รับคุณสมบัติและพฤติกรรมของออบเจ็กต์พาเรนท์โดยการขยายคลาส
Composition และ Inheritance ให้การนำโค้ดกลับมาใช้ใหม่ (code reusability) โดยการเชื่อมโยงคลาส เรายังสามารถได้ฟังก์ชันการทำงานของ inheritance เมื่อใช้ composition ความแตกต่างดังต่อไปนี้
| ลำดับ | หัวข้อ | Inheritance | Composition |
|---|---|---|---|
| 1 | พื้นฐาน | Inheritance เป็นความสัมพันธ์ "is-a" | Composition เป็นความสัมพันธ์ "has-a" |
| 2 | การนำโค้ดกลับมาใช้ (Code Reuse) | ใน Inheritance คลาสสามารถขยายอินเทอร์เฟซเดียวได้ จึงนำโค้ดกลับมาใช้ในคลาสเดียวเท่านั้น | นำโค้ดกลับมาใช้ในหลายคลาสได้ |
| 3 | ขอบเขต (Scope) | Inheritance ให้คุณสมบัติที่ compile time | Composition บรรลุได้ง่ายที่ runtime |
| 4 | Final | ไม่สามารถนำโค้ดจาก final class กลับมาใช้ได้ | อนุญาตให้นำโค้ดจาก final classes กลับมาใช้ได้ |
| 5 | เมธอด | เปิดเผยเมธอด public และ protected ของพาเรนท์ | ไม่เปิดเผย โต้ตอบผ่าน public interface |
ตัวอย่าง Inheritance
class Animal{
String name = "Orio";
}
class Dog extends Animal{
String type = "Dog";
public static void main(String args[]){
Dog p = new Dog();
System.out.println("Name: " + p.name);
System.out.println("Type: " + p.type);
}
}ตัวอย่าง Composition
public class Student { }
public class College {
private Student student;
public College() {
this.student = new Student();
}
}