/**
* 內部類:
* 1.內部類可以訪問其外部類中所有的屬性和方法,無需創建對象
* 2.外部類訪問內部類,必須創建對象
* 類中訪問:
* Inner inner = new Inner();
inner.innerMethod();
類以外訪問:
* Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.innerMethod();
3.當內部類與外部類變量或方法重名時,內部類優先級 > 外部類
4.不能定義static變量
普通類的修飾符:public <default>
內部類的修飾符:public protected <default> private
*
*/
//外部類
public class Outer {
//成員變量
int outerNum = 10;
int x = 55;
//成員方法
public void outerMethod()
{
System.out.println("Outer.outerMethod");
}
//成員內部類
public class Inner
{
int innerNum = 20;
int x = 666;
//static int y = 777;
public void innerMethod()
{
System.out.println("Outer.outerNum:" + outerNum);
System.out.println("Inner.x:" + x); //666
System.out.println("Outer.x:" + Outer.this.x);//55
outerMethod();
}
}
//成員方法
public void showInner()
{
Inner inner = new Inner();
System.out.println("Inner.innerNum : "+ inner.innerNum);
inner.innerMethod();
}
public static void main(String[] args) {
//Outer outer = new Outer();
//outer.showInner();
Outer outer = new Outer();
Inner inner = outer.new Inner();
inner.innerMethod();
}
}
/**
* 局部內部類:在一個類的方法體中或程序塊內定義的內部類
*/
//外部類
public class OuterLocal {
//成員變量
int outerNum = 10;
int x = 55;
//成員方法
public void outerMethod()
{
System.out.println("Outer.outerMethod");
//成員內部類
class Inner
{
int innerNum = 20;
int x = 666;
//static int y = 777;
public void innerMethod()
{
System.out.println("Outer.outerNum:" + outerNum);
System.out.println("Inner.x:" + x); //666
System.out.println("Outer.x:" + OuterLocal.this.x);//55 static修飾的類級別成員不能訪問對象級別的屬性或方法
//outerMethod(); //遞歸調用,自己調用自己
}
}
//局部內部類
Inner inner = new Inner();
inner.innerMethod();
}
public static void main(String[] args) {
OuterLocal outer = new OuterLocal();
outer.outerMethod();
}
}
/**
* 靜態內部類:
* 1.靜態成員不能訪問非靜態成員
* 2.非靜態內部類只能定義非靜態成員,而靜態內部類可以定義靜態成員和非靜態成員
*
* 訪問方式:
* OuterStatic.Inner inner = new OuterStatic.Inner();
inner.innerMethod();
*
*/
//外部類
public class OuterStatic {
//靜態成員變量
static int outerNum = 10;
int x = 55;
//靜態成員方法
public static void outerMethod()
{
System.out.println("Outer.outerMethod");
}
//靜態成員內部類
public static class Inner
{
int innerNum = 20;
int x = 666;
static int y = 777;//靜態內部類可定義靜態的成員
public void innerMethod()
{
System.out.println("Outer.outerNum:" + outerNum);
System.out.println("Inner.x:" + x); //666
//System.out.println("Outer.x:" + OuterStatic.this.x);//55 static修飾的類級別成員不能訪問對象級別的屬性或方法
outerMethod();
}
}
//成員方法
public void showInner()
{
Inner inner = new Inner();
System.out.println("Inner.innerNum : "+ inner.innerNum);
inner.innerMethod();
}
public static void main(String[] args) {
/*OuterStatic outer = new OuterStatic();
outer.showInner();*/
OuterStatic.Inner inner = new OuterStatic.Inner();
inner.innerMethod();
}
}