/*
* 類的內部成員之五:內部類
* 1. Java中容許將一個類A聲明在另外一個類B中,則類A就是內部類,類B稱爲外部類
*
* 2.內部類的分類:成員內部類(靜態、非靜態) vs 局部內部類(方法內、代碼塊內、構造器內)
*
* 3.成員內部類:
* 一方面,做爲外部類的成員:
* >調用外部類的結構
* >能夠被static修飾
* >能夠被4種不一樣的權限修飾
*
* 另外一方面,做爲一個類:
* > 類內能夠定義屬性、方法、構造器等
* > 能夠被final修飾,表示此類不能被繼承。言外之意,不使用final,就能夠被繼承
* > 能夠被abstract修飾
*
*
* 4.關注以下的3個問題
* 4.1 如何實例化成員內部類的對象
* 4.2 如何在成員內部類中區分調用外部類的結構
* 4.3 開發中局部內部類的使用 見《InnerClassTest1.java》
* */java
public class InnerClassTest { public static void main(String[] args) { //建立Dog實例(靜態的成員內部類): Person.Dog dog = new Person.Dog(); dog.show(); //建立Bird實例(非靜態的成員內部類): // Person.Bird bird = new Person.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; int age; public void show(){ System.out.println("卡拉是條狗"); // eat(); } } //非靜態成員內部類 class Bird{ String name = "杜鵑"; public Bird(){ } public void sing(){ System.out.println("我是一隻小小鳥"); Person.this.eat();//調用外部類的非靜態屬性 eat(); System.out.println(age); } 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{ } } }