1. 程式人生 > >224/225_尚學堂_高淇_java300集最全視訊教程_內部類

224/225_尚學堂_高淇_java300集最全視訊教程_內部類

package hong.study.inner_class;

/**
 * 內部類仍然是一個獨立的類,編譯之後會產生相對應的class檔案,但是前面冠以外部類類名和¥符號
 * 內部類可以使用修飾符,public、private、protected、default
 * @author Hong
 *
 */

public class Study01 {
    //Class01和Class02就看成外部類的成員來看待
    private static String name;
    private int age;
    //靜態內部類
    private static class Class01
{
/* *1、其中可以定義普通的成員變數和靜態的成員變數 *2、只能呼叫外部類的靜態的方法和靜態的屬性,該類和外部類的屬性和方法是平級的 *3、在不相關類中,可以直接建立靜態內部類的物件(不需要先建立外部類物件,才能建立靜態內部類物件) Study01.Class01 c = new Study01.Class01(); *4、靜態內部類實際上和其外部類聯絡很少,也就是名稱空間上的聯絡 */ } //成員內部類 private class Class02{ /* * 1、成員內部類就像一個成員變數一樣存在於外部類中 * 2、成員內部類可以訪問外部類的所有成員,包括private * 3、成員內部類的this指內部類本身,要想拿到外部類物件可以使用:外部類名.this * 4、成員內部類的物件一定要繫結在外部類物件上,因此想建立內部類物件必須先建立外部類物件 * 5、成員內部類不能有靜態成員(除非宣告成常量final,並且是常量表達式)或者靜態方法 */
} public void sayHello(){ String s = "Hello"; //方法內部類 class Class03{ /*與方法中的區域性變數的地位類似 * 1、不能用public、private等修飾 * 2、只能在宣告的方法內可見,只在本方法中可用 * 3、內部定義的內容:不能有靜態變數和方法 * 4、不能使用方法中的區域性變數,例如s,除非是final修飾的區域性變數 * *原因:方法中的區域性變數在棧中建立,隨著方法執行完,就會被銷燬,如果執行方法的時候建立了方法內部類物件,而且使用了局部變數 * *因為類物件是在堆中建立的,有可能方法中的區域性變數銷燬之後,堆中還有這個物件,還在用這個區域性變數,此時會出現錯誤 * *如果宣告成final,那麼在類的物件使用的時候,會拷貝一份該常量,即使常量被銷燬,還是有這個值可以使用。 */
} //匿名內部類 Runnable runnable = new Runnable() {//這裡並不是new了介面,而是定義了匿名內部類的實體,並建立了匿名內部類的一個例項 //注意,這裡runnable不是建立的匿名內部類的名字,而是建立的匿名內部類例項的名字 /* * 使用方式:1、繼承式;2、介面式;3、引數式 * 格式就是採用這種格式,這裡採用介面,還可以採用繼承的形式 * 這裡的匿名內部類放在方法中,也是方法內部類,需要符合方法內部類的要求 */ @Override public void run() { // TODO Auto-generated method stub } }; } }