此篇先以代码说明内部类中使用:什么样可以,什么样是错误的写法和使用。
下一篇会以相关的资料说明为什么。为什么有时使用“内部类”,而有时却又使用“静态内部类”较好。
一下代码中,在使用非法处,均已经给出注释。
package test;
/**
* @author ydj
* @version Mar 10, 2010 9:18:59 AM
*/
public class NestedClass {
static String staticVar;//静态变量
String noStaticVar;//实例变量
static void outClassStaticMethod(){
}
void outClassNonStaticMethod(){
}
/**
* 方法中的内部类:注意变量的使用
* @param i
*/
void method(int i){
int a;
final int b;
final int c=0;
class MethodInerClass{
//int a=i; Error
//int a=a; Error
//int a=b; Error
int a=c;
}
//只可在该方法中使用
MethodInerClass obj=new MethodInerClass();
}
/**
* 非静态内部类
*/
class NonStaticInnerClass{
NonStaticInnerClass(){//说明:非静态内部类里可以直接用外部类的静态方法和非静态方法
outClassStaticMethod();
outClassNonStaticMethod();
}
void innerClassNonStaticMethod(){
String a=staticVar;
String b=noStaticVar;
}
// static void innerClassStaticMethod(){//ERROR:只有静态内部类里才可以加静态方法
// }
void method(){}
}
/**
* 静态内部类
*/
static class StaticInnerClass{
StaticInnerClass(){//说明:静态内部类中不可以调用外部类的非静态方法
outClassStaticMethod();
//outClassNonStaticMethod(); //ERROR
}
void innerClassNonStaticMethod(){
String a=staticVar;
//String b=noStaticVar;//ERROR:静态内部类中不可以调用外部类的非静态属性
}
static void innerClassStaticMethod(){//只有静态内部类里才可以加静态方法
}
void method(){}
}
/**
* test
* @param args
*/
public static void main(String[]args){
NestedClass nestedClass=new NestedClass();
/**
* ERROR:静态内部类不可以依赖外部实例
*/
//StaticInnerClass obj1=nestedClass.new StaticInnerClass();
StaticInnerClass obj1=new StaticInnerClass();
/**
* ERROR:非静态内部类不可以单独使用,它需依赖外部实例
*/
//NonStaticInnerClass obj2=new NonStaticInnerClass();
NonStaticInnerClass obj2=nestedClass.new NonStaticInnerClass();
}
}