在方法中定义的内部类,我们称之为 local inner class, 局部内部类?
在方法内部定义
interface MyInterface{
void showMe();
}
public class Outer {
private String name = "DASHA";
// 在函数内部实现的内部类,需要实现某个接口,因为Inner这个类名在getInner函数之外是不可见的,下面的定义是无法编译的
// public Inner getInner(){
//
// public class Inner{
//
// public Outer getOuter(){
// return Outer.this;
// }
// }
//
// return new Inner();
// }
public MyInterface getInner(){
String text = "My Name is ";
//定义一个内部类
class Inner implements MyInterface{
//在内部类里既可以访问方法的局部变量,也能访问outer类的属性和方法
@Override
public void showMe() {
System.out.println(text + name);
}
}
return new Inner(); //此处实际返回的类型是MyInterface
}
public void showInner(){
//Inner类仅在它定义的那个方法中可见
//Inner dd = new Inner()
}
public static void main(String[] args){
MyInterface mi = new Outer().getInner();
mi.showMe();
}
}
在方法内部的局部区域定义内部类
interface MyInterface{
void showMe();
}
public class Outer {
private String name = "DASHA";
public MyInterface getInner(boolean bCreate){
//如果内部类没有阐释改下text的内容,那么也可以不用final修饰
//反正意思就是Inner类不要修改所在的方法的局部变量
//String text = "You are";
final String text = "You are ";
if(bCreate){
//定义一个内部类,它尽在这个if分支中可见
class Inner implements MyInterface{
//在内部类里既可以访问方法的局部变量,也能访问outer类的属性和方法
@Override
public void showMe() {
System.out.println(text + name);
}
public Inner(String desc){
name = desc;
}
}
return new Inner("HUAIDAN"); //此处实际返回的类型是MyInterface
}else{
//此处是无法使用Inner的,Inner只能在它定义的那个scope中访问
//return new Inner();
return null;
}
}
public static void main(String[] args){
MyInterface mi = new Outer().getInner(true); //这里需要注意的是就是传入的是false,inner类也会被编译出来
mi.showMe();
}
}