Java 内部类和Lambda
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); } }