224/225_尚學堂_高淇_java300集最全視訊教程_內部類
阿新 • • 發佈:2019-02-15
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
}
};
}
}