内部类的实现方式
可以把一个类定义在另一个类内部。
- 基本形式
以下为内部类的基本形式:
public class MyInnerDemo {
public class InnerClass1{
public void say(){
System.out.println("innerClass1 say");
}
}
}
- 内部类引用
如何引用并内部类?可以使用new进行进行创建。
public class InnerTest {
public static void main(String[] args){
MyInnerDemo ic = new MyInnerDemo();
MyInnerDemo.InnerClass1 inner = ic.new InnerClass1();
}
}
- 在方法中的内部类
内部类也可以定义在方法中。
public class MyInnerDemo {
public void say(){
class InnerClass1{
public void say(){
System.out.println("innerClass1 say");
}
}
new InnerClass1().say();
}
}
- 匿名内部类
public interface InnerInterface {
public void say();
}
public class MyInnerDemo {
public void say(){
new InnerInterface(){
@Override
public void say() {
System.out.println("interface say");
}
}.say();
}
}
java闭包的实现
闭包是为外部对象提供访问内部变量的能力。结合内部类的知识实现一个简单的闭包。
改造之前写的InnerInterface对象添加一个String参数。
public interface InnerInterface {
public void say(String s );
}
添加foreache方法,该方法遍历list对象。注意该list是在foreach方法中声明并赋值的。因此list的作用域是在foreach方法中。为了能让外部方法也能够访问到list中的值,这里需要传入一个接口InnerInterface。
public class MyInnerDemo {
public void foreach(InnerInterface innerInterface){
List<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
for (String s: list) {
innerInterface.say(s);
}
}
}
来测试一下吧~,此处使用的是JDK1.8的表达方式。
public class InnerTest {
public static void main(String[] args){
MyInnerDemo ic = new MyInnerDemo();
ic.foreach(s-> System.out.println(s));
}
}
输出结果为:
a
b
c