內部類:乙個類定義在另乙個類的內部,該類就被稱為內部類。
內部類的class檔名:外部類$內部類。 優點:便於區分該內部類是屬於那個外部類的
內部類的類別:
一、成員內部類:
成員內部類的訪問方式:
方式一:在外部類提供乙個方法建立內部類的物件進行訪問
方式二:在其他類直接建立內部類的物件。
格式:外部類.內部類 變數名=new 外部類().new 內部類();
例:outer.inner inner=new outer().new inner();
注意:如果是乙個靜態內部類,那麼在其他類建立的格式是:
外部類.內部類 類名 = new 外部類.內部類();
outer.inner inner = new outer.inner();
內部類的應用場景:我們在描述事物a的時候,發現描述的事物a中還存在另外乙個比較複雜的事物b的時候,而且這個比較複雜的事物b還需要訪問a事物的屬性等資料,那麼這個時候我們就可以使用內部類描述b事物
比如:人------->心臟
內部類的好處: 內部類可以直接訪問外部類的所有成員
內部類要注意的細節:
1.如果外部類與內部類存在同名的成員變數時,在內部類中預設情況下是訪問內部類的成員變數
可以通過外部類.this.成員變數名 指定訪問外部類的成員變數
2.私有的成員內部類只能在外部類提供乙個方法建立內部類的物件進行訪問,不能再其他類在建立物件了
3.成員內部類一旦出現了靜態的成員,那麼該類也必須用static修飾
class
outer
}public
void
instance()
}class
demo8
}
二、區域性內部類:
在乙個類的方法內部定義另外乙個類,那麼另外乙個類就稱作為區域性內部類
區域性內部類要注意的細節:
1.如果區域性內部類訪問了乙個區域性變數,那麼該區域性變數必須使用final修飾;
class
outer1
} inner inner =
newinner()
; inner.
print()
;}}class
outer
}
三、匿名內部類
沒有類名的類,就稱作為匿名內部類
好處:簡化書寫
匿名內部類的使用前提:必須存在繼承或者實現關係才能使用
匿名內部類只是沒有類名,其他的一概成員都是具備的
new 父類類名()
;
new 父類類名()}.
print()
;//呼叫內部成員方法
abstract
class
animal
class
outer
} //建立物件
dog d = new dog();
d.run();
*///匿名內部類:匿名內部類只是沒有類名,其他的一概成員都是具備的(借用了父類的名字)
//匿名內部類與animal是繼承的關係
/* new animal()
public void sleep()
//呼叫匿名內部類的方法
}.run().sleep();
*/animal a =
newanimal()
public
void
sleep()
/* //特有的方法
public void bite()
*/};
//比較特殊的地方,大括號後需加分號
a.run();
a.sleep()
;}}class
demo
}
//實現關係下的匿名內部類
inte***ce
daoclass
outer1}.
add();
}}class
demo5
}
匿名內部類一般是用於實參的
例題:
//實現關係下的匿名內部類
inte***ce
daoclass
outer1}.
add();
}}class
demo5})
;}public
static
void
test
(dao d)
}
成員內部類(例項內部類)
特性 不能有靜態成員 字段,方法 內部類物件外部建立語法 outter.new inner 例項方法訪問外部類例項成員 outter.this.成員 例項1 特性測試public class memberinnerclass class outer1 public class inner1 例項2 ...
內部類之成員內部類
一 位置 成員內部類是最普通的內部類,它定義在乙個類的內部 二 內部類的結構 1.可以定義非靜態屬性和方法,不可以定義static修飾的屬性和方法,可以定義static final修飾的編譯期變數 不用載入類的位元組碼 1.1為什麼不可以定義static修飾的屬性和方法?首先內部類是外部類的乙個成員...
內部類 成員內部類 區域性內部類 匿名內部類
public class 外部類 private int num 0 外部類如果要訪問內部類的成員,則需要通過內部類的物件訪問 使用方式 1.外部類使用內部類,主函式再使用外部類 2.通過new的方式 外部類.內部類 物件名 new 外部類 new 內部類 定義在方法內部的類,就是區域性內部類,只有...