package mk.bigdata.java11;
/*
*
* 類的內部成員之五:內部類
*
* 1.Java中允許將一個類A聲明在另一個類B中,則類A就是內部類,類B稱爲外部類
*
* 2.內部類的分類:成員內部類(靜態、非靜態) VS 局部內部類(方法內、代碼塊內、構造器內)
*
* 3.成員內部類:
* 一方面,作爲外部類的成員:
* >調用外部類的結構
* >可以被static修飾
* >可以被4種不同的權限修飾
*
*
* 另一方面,作爲一個類:
* > 類內可以定義屬性、方法、構造器等
* > 可以用final修飾,表示不能被繼承。反之 不適用final 可以被繼承
* > 可以被abstract修飾
*
*
* 4.關注如下的3個問題
* 4.1 如何實例化成員內部類的對象
* 4.2 如何在成員內部類中去區分調用外部類的結構
* 4.3 開發中局部內部類的使用
*
*
*
*
*
*
* */
public class InnerClassTest {
public static void main(String[] args) {
//創建Dog實例(靜態的成員內部類)
Person.Dog dog = new Person.Dog();
dog.show();
//創建Bird實例(非靜態的成員內部類)
Person p = new Person();
Person.Bird bird = p.new Bird();
bird.Sing();
System.out.println();
bird.display("黃鸝");
}
}
class Person{
String name ="小明";
int age;
public void eat(){
System.out.println("人:喫飯");
}
//靜態成員內部類
static class Dog{
String name;
public void show(){
System.out.println("卡拉是條狗");
// eat();
}
}
//非靜態局部內部類
class Bird{
String name ="杜鵑" ;
int age;
public Bird(){}
public void Sing(){
System.out.println("我是一隻小小鳥");
Person.this.eat(); //調用外部類的非靜態屬性
}
public void display(String name){
System.out.println(name);//方法的形參
System.out.println(this.name);//內部類的屬性
System.out.println(Person.this.name);//外部類的屬性
}
}
public void method(){
//局部內部類
class AA {
}
}
//局部內部類
{
class BB{
} }
//局部內部類
public Person(){
class CC {
}
}
}
Java語言基礎-內部類
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.