java内部类
/**
* 内部类 可以是public private static,
* 可以在类中,方法中,
* 可是是匿名,
* 可以使用外部类成员,也可以使用方法中final变量-非static
* 可以依靠外部类实例化,或是正常在类外实例化-static的嵌套类
* 可以内部类再内部类-static的嵌套类
*
* 看几个例子就不言而喻了
* @author dirk.zhang
* 2012-12-24 下午5:53:32
*/
public class OutClass {
private String content;
private int id;
public OutClass(){
content = "just test";
}
/**
* 私有内部类
* @author dirk.zhang
* 2012-12-24 下午5:34:30
*/
public class innnerClass{
public String getstr(){
return content;
}
}
/**
* 私有内部类
* @author dirk.zhang
* 2012-12-24 下午5:34:40
*/
private class innerClass2{
public void modify(){
id++;
}
}
/**
* 方法中的内部类
* 实现闭包
*/
public void getInner(){
interface1 actual1 = new interface1() {
@Override
public void show() {
System.out.println(content);
}
};
actual1.show();
}
/**
* 匿名类
* @return
*/
public interface1 getInner2(){
return new interface1() {
@Override
public void show() {
System.out.println(id);
}
};
}
/**
* 内部类,如用到方法里的参数,需要fianl
* @param a
* @param f
* @return
*/
public interface2 getInner3(String a,final int f){
return new innerClass3(a,f) {
@Override
public void show(String a){
System.out.println(a);
System.out.println(content);
}
public int geta(){
return f;
}
};
}
private static int staticI = 10;
/**
* 嵌套类
* @author dirk.zhang
* 2012-12-24 下午5:48:09
*/
public static class innerClass4{
public void showa(){
// System.out.println(content);不能使用外部类的非static变量
System.out.println(staticI);
}
}
public interface interface1{
public void show();
}
public class innerClass3 implements interface2{
private String str;
private int i;
public innerClass3(String str,int i){
this.str = str;
this.i = i;
}
@Override
public void show(String a) {
System.out.println(a);
}
}
public interface interface2{
public void show(String a);
}
public static void main(String[] args) {
OutClass outclass = new OutClass();
System.out.println(outclass.content);
innerClass3 i3 = outclass.new innerClass3("", 1);
innerClass4 i4 = new innerClass4();
}
}