package j2se.basicKnowledge.exercises;
public class InnerClassTest {
static int i=10;
int i1 = 1;
static class StaticInnerClass{
int staticInnerVar = 1; //‘静态内部类’中可以有‘非’静态的成员
static int staticInnerVar1=9;
public void staticInnermethod(){
i++;
//i1++;//k为非静态成员,在静态内部类中不能直接用this.i1使用,故此处会报错!但可以像下面那样来使用。
InnerClassTest is = new InnerClassTest();
is.i1++;
}
}
class NotStaticInnerClass{
int notStaticInnerVar=2;
//static int notStaticInnerVar1=3; //非静态内部类中'不能'有'静态成员',故这里会有错!
public void notStaticInnerMethod(){
/*在‘非静态内部类’的‘非静态方法’中可以‘直接使用’外部类的‘非静态成员’和‘静态成员’*/
i++;
i1++;
}
}
//非静态方法中建立非静态内部类和静态内部类实例的步骤:一样的,都是直接new他们的实例对象,而‘不用’先new外部类的对象
public void notStaticMethod(){
//建立静态内部类实例
StaticInnerClass ic = new StaticInnerClass();
//建立非静态内部类实例
NotStaticInnerClass nic = new NotStaticInnerClass();
}
//静态方法中建立非静态内部类和静态内部类实例的步骤:有区别的
public static void main(String [] args){
//建立非静态内部类实例:先new外部类实例,再用“外部类名.内部类名 = 外部类实例.new 内部类()”的方法
InnerClassTest ict = new InnerClassTest();
InnerClassTest.NotStaticInnerClass nsic = ict.new NotStaticInnerClass();
//建立静态内部类实例:直接’外部类名.静态内部类名 var = new 外部类名.静态内部类名()‘的方式
InnerClassTest.StaticInnerClass sic = new InnerClassTest.StaticInnerClass();
//引用静态内部类的静态成员方式:
int l = InnerClassTest.StaticInnerClass.staticInnerVar1;
//引用静态内部类的非静态静态成员方式:
int l1 = sic.staticInnerVar;
}
}
package j2se.basicKnowledge.exercises;
/*静态内部类在无论是在static方法中还是在非static的方法中都可以直接new自己的实例对象;而不用先new外部类*/
public class OutClass {
private static class InterClass {
public InterClass() {
System.out.println("InterClass Create");
}
}
public OutClass() {
InterClass ic = new InterClass();
System.out.println("OuterClass Create");
}
public void aa() {
InterClass ic = new InterClass();
}
public static void main(String[] args) {
InterClass ic = new InterClass();
OutClass oc = new OutClass();
oc.aa();
}
}