1、非静态内部类实例化方式 InnerClass innerClass =outClass.new InnerClass();
访问内部变量及方法方式: innerClass.method()
innerClass.i
2、静态内部类实例化方式 : StaticInnerClass staticInnerClass =new OutClass.StaticInnerClass();
StaticInnerClass staticInnerClass2 = new StaticInnerClass();
访问非静态变量和方法方式:staticInnerClass.j
staticInnerClass.Method()
访问静态变量和方法方式: staticInnerClass.staticMethod(); StaticInnerClass.staticMethod();
staticInnerClass.i StaticInnerClass.i
注意事项:1、内部类可声明为public、private、protected或static
2、非静态内部类不可声明静态变量或方法
3、静态内部类可声明静态变量或方法
代码示例:
public class OutClass {
static int i = 0;
static {
System.out.println("外部类静态方法");
}
public OutClass() {
System.out.println("外部类构造方法");
}
public void outMethod(){
System.out.println("外部类非静态方法");
}
public static void main(String[] args) {
OutClass outClass = new OutClass();
// 非静态内部类的实例化方式,需要先创建外部类实例
InnerClass innerClass =outClass.new InnerClass();
System.out.println("非静态变量 i = " + innerClass.i);
// 访问非静态内部类里的方法
innerClass.method();
// 静态内部类实例化方式
StaticInnerClass staticInnerClass =new OutClass.StaticInnerClass();
StaticInnerClass staticInnerClass2 = new StaticInnerClass();
// 静态内部类访问内部静态方法的两种方式
staticInnerClass.staticMethod();
StaticInnerClass.staticMethod();
// 静态内部类访问内部静态变量的两种方式
System.out.println("静态变量 i = " + staticInnerClass.i);
System.out.println("静态变量 i = " + StaticInnerClass.i);
// 非静态变量访问方式
System.out.println("非静态变量 j = " + staticInnerClass.j);
// 非静态方法访问方式
staticInnerClass.Method();
}
// 内部类可声明为public、private、protected或static
class InnerClass{
// 非静态内部类不可声明静态变量或方法
int i = 0;
void method() {
System.out.println("非静态内部类方法");
}
public InnerClass(){
System.out.println("非静态内部类构造方法");
}
}
static class StaticInnerClass{
// 静态内部类可声明静态变量或方法
static int i = 0;
int j = 0;
static void staticMethod() {
System.out.println("静态内部类静态方法");
}
void Method() {
System.out.println("静态内部类非静态方法");
}
public StaticInnerClass() {
System.out.println("静态内部类构造方法");
}
}
}
// 和OutClass外部类同级的外部类,不可声明为public、private、protected或static
class OutClass1{
// 内部类同OutClass中的内部类
class InnerCalss{
}
}
结果: