內部類可以被繼承

2021-08-31 12:23:21 字數 2656 閱讀 6168

/**

成員內部類

作為外部類的乙個成員存在,與外部類的屬性、方法並列。

*/package outer;

public class outer

public void outer_f2()

// 成員內部類中,不能定義靜態成員(原因是錯過了靜態的載入時期:成員內部類是在new外部類物件的時候載入的)

// 成員內部類中,可以訪問外部類的所有成員

class inner

}//外部類的非靜態方法訪問成員內部類

public void outer_f3()

// 外部類的靜態方法訪問成員內部類,與在外部類外部訪問成員內部類一樣

public static void outer_f4()

public static void main(string args)

}//注意:內部類是乙個編譯時的概念,一旦編譯成功,就會成為完全不同的兩類。

//對於乙個名為outer的外部類和其內部定義的名為inner的內部類。編譯完 成後出現outer.class和outer$inner.class兩類。

/**

如果你不需要內部類物件與其外圍類物件之間有聯絡,那你可以將內部類宣告為static。

這通常稱為巢狀類(nested class)。想要理解static應用於內部類時的含義,你就必須記住,

普通的內部類物件隱含地儲存了乙個引用,指向建立它的外圍類物件。然而,

當內部 類是static的時,就不是這樣了。巢狀類意味著:

1. 要建立巢狀類的物件,並不需要其外圍類的物件。

2. 不能從巢狀類的物件中訪問非靜態的外圍類物件。

*/package outer;

public class outer

public void outer_f2()//成員方法

// 靜態內部類可以用public,protected,private修飾

// 靜態內部類中可以定義靜態或者非靜態的成員

static class inner//靜態內部類

void inner_f2()//成員方法

}public void outer_f3()//成員方法

public static void main(string args)

}//生成乙個靜態內部類不需要外部類成員:這是靜態內部類和成員內部類的區別。

//靜態內部類的物件可以直接生成:outer.inner in = new outer.inner();

//而不需要通過生成外部類物件來生成。這樣實際上使靜態內部類成為了乙個頂級類

//(正常情況下,你不能在介面內部放置任何**,但巢狀類可以作為介面的一部分,因為它是static 的。

//只是將巢狀類置於介面的命名空間內,這並不違反介面的規則)

/**

:區域性內部類

在方法中定義的內部類稱為區域性內部類。與區域性變數類似,區域性內部類不能有訪問說明符,

因為它不是外圍類的一部分,但是它可以訪問當前**塊內的常量,和此外圍類所有的成員。

*/package outer;

public class outer

int inner_i = 100;

void inner_f(int k)

}new inner(k);

}public static void main(string args)

}

package outer;

inte***ce contents

//在方法中返回乙個匿名內部類

public class outer

}; // 在這裡需要乙個分號

}public static void main(string args)

}

/**

基類帶參的構造器

*/package outer1;

};public class outer1

}; // semicolon required

} public static void main(string args)

}

class egg2 public void f()//內部類的成員方法 } private yolk y = new yolk();//例項化內部類 public egg2()//外部類的構造方法 public void insertyolk(yolk yy)//外部類的成員方法 public void g() //外部類的成員方法 } public class bigegg2 extends egg2 public void f() } public bigegg2()//外部類的構造方法 public static void main(string args) } //答案:new egg2()
/**

內部類能不能過載:結果證明:內部類不能重灌

*/class egg

}public egg()

}public class bigegg extends egg

}public static void main(string args)

}

內部類繼承

成員內部類的子類可以是內部類,也可以不是內部類 當成員內部類的子類不是內部類或子類雖是內部類但與其父類不在同乙個外部類時,子類的構造方法第一句要顯式新增如下的語句 外部類物件引用.super 引數 這裡的外部類指父類所在的外部類編譯器預設給成員內部類的構造方法傳入乙個引數,該引數是內部類所依附的外部...

java 靜態內部類不可以繼承非靜態內部類理解

最近遇到乙個疑惑,為啥靜態內部類不可以繼承非靜態內部類理解呢?一查資料,都是千篇一律,都是對內部類的講解,都不能直接找到這個疑惑的答案。請教了一些大神,最後明白了其中原委,這裡做個記錄,哪天又不清楚了可以用來看看。看圖 如上圖所以,要想new 非靜態內部類,必須得有外部類的例項,我們都知道靜態類 靜...

java 繼承 內部類

需要如下定義 public class outer public class extendsinner extends outer.inner 當建立乙個子類時,子類構造器總會呼叫父類的構造器,因此在建立非靜態內部類的子類時,必須 保證讓子類構造器可以呼叫非靜態內部類的構造器,呼叫非靜態內部類的構造...