Java內部類
內部類又稱為嵌套類,是在類中定義另外一個類。內部類可以處於方法內/外,內部類的成員變量/方法名可以和外部類的相同。內部類編譯后會成為完全不同的兩個類,分別為outer.class和outer$inner.class類。外部類只能是public或者默認。
內部類的作用
1. 內部類可以很好的實現隱藏。一
般的非內部類,是不允許有 private 與protected權限的,但內部類可以
2. 內部類擁有外圍類的所有元素的訪問權限 (private修飾也能訪問)
3. 可實現多重繼承 (讓多個內部類分別繼承多個其他類,使外部類可以同時獲取多個其他類的屬性)
4 .可以避免修改接口而實現同一個類中兩種同名方法的調用。(外部類繼承,讓內部類實現接口)
2. 內部類擁有外圍類的所有元素的訪問權限 (private修飾也能訪問)
3. 可實現多重繼承 (讓多個內部類分別繼承多個其他類,使外部類可以同時獲取多個其他類的屬性)
4 .可以避免修改接口而實現同一個類中兩種同名方法的調用。(外部類繼承,讓內部類實現接口)

Java Lambda的演進
public class LambdaTest { class Chinese2 implements People { @Override public void speak(String content) { System.out.println(content); } } private static class Chinese3 implements People { @Override public void speak(String content) { System.out.println(content); } } public static void main(String[] args) { People people; // 1.普通類 people = new Chinese1(); people.speak("test"); // 2.非靜態內部類 people = new LambdaTest().new Chinese2(); people.speak("test"); // 3.靜態內部類 people = new Chinese3(); people.speak("test"); // 4.局部內部類 class Chinese4 implements People { @Override public void speak(String content) { System.out.println(content); } } people = new Chinese4(); people.speak("test"); // 5.匿名內部類 people = new People() { @Override public void speak(String content) { System.out.println(content); } }; people.speak("test"); // 6.lambda表達式 people = (String content) -> { System.out.println(content); }; people = (content) -> System.out.println(content); people.speak("test"); } } interface People { void speak(String content); } class Chinese1 implements People { @Override public void speak(String content) { System.out.println(content); } }