一、內部類
將乙個類定義在另乙個類的裡面,對裡面那個類就稱為內部類(內建類,巢狀類)
非static內部類可以直接訪問外部類中的成員,包括私有成員。
原因:因為內部類中持有了乙個外部類的引用,
引用的格式為: 外部類名.this
非靜態內部類不能定義static成員
1、 內部類定義在外部類的成員位置上(方法外部):
1>可以被private 、 static 成員修飾符修飾。
被private修飾: 將內部類在外部類中進行封裝。
被static修飾的內部類只能訪問外部類中的靜態成員,出現了訪問許可權、
2>在外部其它類中建立非static內部類的例項變數:必須要先建立外部類的例項物件,然後通過外部類的例項物件去建立內部類的例項物件。
outer outer = new outer();
outer.inner inner = outer.new inner(); // new outer().new inner( )
3>在外部其他類中,直接訪問static內部類的非靜態成員:
用內部類物件去呼叫非靜態成員: new outer.inner( ).function( );
4>在外部其他類中,直接訪問static內部類的靜態成員:
outer.inner.function();
內部類中變數的訪問**示例:
外部類要訪問內部類中的成員必須要先建立外部類的例項物件,然後通過外部類的例項物件去建立內部類的例項物件。
訪問格式:當內部類定義在外部類的成員上,且非私有,可以在外部其他類中直接建立內部類物件
outer.inner in = new outer().new inner();
in.function( );
class outer
} void method()
}class innerclassdemo
}
被static修飾的方法,內部類,訪問示例:
class outer2
} //靜態內部類,方法不是靜態
static class inner2
} public static void method()
}class innerclassdemo2
}
2、 內部類定義區域性位置上(方法內部)
1 、該內部類也可以直接訪問外部類中的成員,因為還持有外部類中的引用
2、不能有訪問型別修飾符,就好像方法中定義的區域性變數一樣。但該內部類前面可以使用abstract和final修飾符。
3、這種類對其它類是不可見的,其它類無法引用這種內部類,但該內部類所建立的例項物件可以傳遞給其它類訪問就好像方法中定義的區域性變數一樣,
2、這種內部類可以訪問所在方法體中的區域性變數,但是必須是被final關鍵字修飾的。
內部類定義在區域性**演示:
class outer
} new inner().function(); }
}class innerclassdemo3
}
1>在成員位置上(方法外部定義的內部類),在前面可以加上static關鍵字,從而成為static nested class
它不再具有內部類的特性,所以,從狹義上講,它不是內部類。
static nested class與普通類在執行時的行為和功能上沒有什麼區別,只是在程式設計引用時的語法上有一些差別,它可以定義成public、protected、預設的、
private等多種型別,而普通類只能定義成public和預設的這兩種型別。在外面引用static nested class類的名稱為「外部類名.內部類名」。在外面不需要創
建外部類的例項物件,就可以直接建立static nested class。
例如,假設inner是定義在outer類中的static nested class,那麼可以使用如下語句建立inner類:
outer.inner inner = new outer.inner();
2>在靜態方法中定義的內部類也是static nested class,這時候不能在類前面加static關鍵字
靜態方法中的static nested class與普通方法中的內部類的應用方式很相似,它除了可以直接訪問外部類中的static的成員變數,還可以訪問靜態方法中
的區域性變數,但是,該區域性變數前必須加final修飾符。
注意:
當內部類中定義了靜態成員,該內部類也必須是靜態的,即非靜態內部類不能定義靜態成員。
當外部類中的靜態方法訪問內部類時,該內部類也必須是靜態的,靜態只能訪問靜態
內部類定義原則:
當描述事物時,事物的內部還有事物,該事物用內部類來描述。
因為內部事務在使用外部事物的內容。
1 就是內部類的簡化寫法。
2、前提:
內部類可以繼承或實現乙個外部類或者實現介面
3、格式:
new 外部類名或者介面名( )
}abstract class absdemo
class outer
void abc()
}*/ public void function()
void abc()
};d.show();
編譯失敗,因為父類中沒有定義
}}
//練習一:補足**。通過匿名內部類。
inte***ce inter
class test
} static function ()
*/ static inter function()
}; }}
class innerclasstest1
//練習二:匿名內部類作為函式引數
//當使用的方法接收的引數是乙個介面時,該介面中的方法較少,可以定義乙個匿名內部類傳進去
public static void show(inter in)
} show(new inter()
});
//練習三:沒有「一般」(因為有上帝:object)父類,也沒有介面的情況下,建立匿名內部類
class innerclasstest3
}.function();
}}
java基礎《內部類》
一 內部類的訪問規則 1.內部類可以直接訪問外部類中的成員,包括私有 之所以可以直接訪問外部類中的成員,是因為內部類中持有了乙個外部類的引用 格式 外部類名.this 2.外部類要訪問內部類,必須建立內部類物件 訪問格式 1.當內部類定義在外部類的成員位置上,而且非私有,可以在外部其他類中,可以直接...
java基礎 內部類
內部類 一 內部類的訪問規則 1,內部類可以直接訪問外部類中的成員,包括私有。之所以可以直接訪問外部類中的成員,是因為內部類中持有了乙個外部類的引用,格式 外部類名.this 2,外部類要訪問內部類,必須建立內部類物件。例子 class outer static class inner2 publi...
java基礎 內部類
內部類具有 隱藏的功能 從外部類的非靜態方法之外的任何位置建立某個內部類的物件,必須outclassname.innerclassname.this 生成對外圍物件的引用,外部類的名字緊跟.thispublic outer get new 用於建立內部類物件,當生成內部類物件時,必須有外部類的例項使...