1、Java Member Inner Class
public class JavaMemberInnerClass {
private int data = 10;
private static String str = "hello";
protected double score = 90.0;
// 内部成员类能获取父类所有成员(private,protected,static, etc..)
class MemberInnerCls{
void msg(){
System.out.println(str + ";" + data + ";" + score);
}
}
public static void main(String[] args) {
//MemberInnerCls是实例变量,和data,score一样,因此不能通过类名
// 必须先实例化父类
JavaMemberInnerClass parentCls = new JavaMemberInnerClass();
JavaMemberInnerClass.MemberInnerCls childCls = parentCls.new MemberInnerCls();
childCls.msg();
}
}
编译之后生成两个class文件:
(1)JavaMemberInnerClass.class
(2)JavaMemberInnerClass$MemberInnerCls.class
2、Java static nested class
public class JavaStaticNestedCls {
private int data = 10;
private static String str = "hello";
static class StaticInnerCls {
// ok
void msg(){
System.out.println(str);
}
// compile error,Cannot make a static reference to the non-static field data
void msg2(){
System.out.println(data);
}
static void msg3(){
System.out.println("inner class static method");
}
}
public static void main(String[] args) {
JavaStaticNestedCls.StaticInnerCls staticInnerCls = new JavaStaticNestedCls.StaticInnerCls();
staticInnerCls.msg();
JavaStaticNestedCls.StaticInnerCls.msg3(); // ok
}
}
编译后生成2个class文件
(1)JavaStaticNestedCls.class
(2)JavaStaticNestedCls$StaticInnerCls.class