Java語言中的內部類和組合是兩種不同的實現方式,它們都是為了更好地實現類之間的關系而生的。
首先來說說內部類,內部類是指定義在另一個類內部的類,它可以訪問外部類的成員變量和方法,并且可以實現接口和繼承其他類。內部類還可以分為靜態內部類和非靜態內部類,靜態內部類可以直接通過外部類訪問,而非靜態內部類則需要先創建外部類的實例才能訪問。
public class OuterClass { private int num = 10; // 靜態內部類 static class StaticInnerClass { public void printNum() { System.out.println("num is " + num); //不允許訪問外部類的非靜態成員變量 } } // 非靜態內部類 class InnerClass { public void printNum() { System.out.println("num is " + num); } } public static void main(String[] args) { OuterClass.StaticInnerClass staticInnerClass = new OuterClass.StaticInnerClass(); staticInnerClass.printNum(); OuterClass outerClass = new OuterClass(); OuterClass.InnerClass innerClass = outerClass.new InnerClass(); innerClass.printNum(); } }
其次是組合,組合是指一個類將其他類對象作為自己的成員變量,通過調用成員變量的方法來實現該類的功能。組合是一種強關聯的關系,組合的對象是該類的一部分,不能獨立存在。
public class Car { private Engine engine; private GearBox gearBox; public Car() { engine = new Engine(); gearBox = new GearBox(); } public void start() { engine.start(); gearBox.shift(); } } public class Engine { public void start() { System.out.println("Engine is starting..."); } } public class GearBox { public void shift() { System.out.println("GearBox is shifting..."); } } public class Main { public static void main(String[] args) { Car car = new Car(); car.start(); } }
所以,內部類和組合都是為了更好地實現類之間的關系而生,雖然它們的實現方式不同,但是它們都可以有效地提高代碼的復用性和靈活性。