我使用的編輯器是Notepad++,學習視頻:畢向東Java基礎教程
//(局部)內部類和外部類的基本運用
class Outer
{
int num = 3; //外部類的成員變量
class Inner1 //非靜態內部類
{
int num=4; //內部類的成員變量
void show1()
{
int num =5; //方法中的局部變量
System.out.println("非靜態內部類示例: ");
System.out.println("num1: "+num); //打印方法中的局部變量,5
System.out.println("num2: "+this.num); //打印內部類的成員變量,4 相當於Inner.this.num
System.out.println("num3: "+Outer.this.num); //打印外部類的成員變量,3
}
}
static class Inner2 //靜態內部類中的成員都是靜態的
{
static int num=6; //內部類的成員變量
static void show2()
{
System.out.println("\n靜態內部類示例: ");
System.out.println("num4: "+num); //打印靜態變量,6
}
}
void method1() //外部類要訪問內部類中的成員,必須創建內部類的對象
{
Inner1 in1 = new Inner1();
in1.show1();
}
void method2()
{
final int num= 8; //局部內部類只能訪問由final修飾的局部變量
class Inner3 //局部內部類
{
void show3()
{
System.out.println("\n局部內部類示例: ");
System.out.println("num7: "+num); //打印8
}
}
Inner3 in = new Inner3();
in.show3();
}
}
class OuterDemo
{
public static void main(String[] args)
{
//外部類間接訪問內部類的成員
System.out.println("\n外部類間接訪問內部類的成員\n");
Outer out = new Outer();
out.method1();
//外部類直接訪問內部類中的成員
System.out.println("\n外部類直接訪問內部類中的成員\n");
Outer.Inner1 in2 = new Outer().new Inner1();
in2.show1();
//內部類是靜態的,相當於一個外部類
Outer.Inner2 in3 = new Outer.Inner2();
in3.show2();
//局部內部類
Outer out1 = new Outer();
out1.method2();
}
}
結果顯示如下: