有这样一种内部类,它是嵌套在方法和作用域内的,对于这个类的使用主要是应用与解决比较复杂的问题,想创建一个类来辅助我们的解决方案,到那时又不希望这个类是公共可用的,所以就产生了局部内部类,局部内部类和成员内部类一样被编译,只是它的作用域发生了改变,它只能在该方法和属性中被使用,出了该方法和属性就会失效。

匿名内部类,任意作用域中嵌入的内部类都属于局部内部类的范畴。

<局部内部类>

 interface Destination {
String readLabel();
} class Test003Sub { public Destination destination(String s) {
class Test003Inner1 implements Destination {
private String s; private Test003Inner1(String s) {
this.s = s;
} @Override
public String readLabel() {
return s;
}
}
return new Test003Inner1(s);
}
} public class Test003 {
public static void main(String[] args) {
Test003Sub test003 = new Test003Sub();
System.out.println(test003.destination("Hello World").readLabel());// Hello World
}
}

<匿名内部类>

上例也可以改成匿名内部类。在匿名类内部使用的参数推荐加final。

 interface Destination {
String readLabel();
} class Test003Sub {
public Destination destination(final String s) {
return new Destination() {
private String sin = s; @Override
public String readLabel() {
return sin;
}
};
}
} public class Test003 {
public static void main(String[] args) {
Test003Sub test003 = new Test003Sub();
System.out.println(test003.destination("Hello World").readLabel());// Hello World
}
}

<任意作用域中嵌入的内部类>

内部类还可以嵌入到方法的任意作用域中。代码中内部类嵌入if内,并不是说该类创建是有条件的,它与其他类一样是一起编译过的。

 class Test004Sub {
String internalTracking(boolean b) {
String s = "";
if (b) {
class TrackingSlip {
private String s; private TrackingSlip(String s) {
this.s = s;
} String getSlip() {
return s;
}
}
TrackingSlip ts = new TrackingSlip("Hello World!");
s = ts.getSlip();
} else {
s = "No Data!";
}
return s;
}
} public class Test004 {
public static void main(String[] args) {
Test004Sub test004 = new Test004Sub();
System.out.println(test004.internalTracking(true)); // Hello World!
System.out.println(test004.internalTracking(false)); // No Data!
}
}
05-19 21:15