1. 程式人生 > 其它 >類的內部成員之五:內部類(Person.Bird bird = p.new Bird();)

類的內部成員之五:內部類(Person.Bird bird = p.new Bird();)

/*
* 類的內部成員之五:內部類
* 1. Java中允許將一個類A宣告在另一個類B中,則類A就是內部類,類B稱為外部類
*
* 2.內部類的分類:成員內部類(靜態、非靜態) vs 區域性內部類(方法內、程式碼塊內、構造器內)
*
* 3.成員內部類:
* 一方面,作為外部類的成員:
* >呼叫外部類的結構
* >可以被static修飾
* >可以被4種不同的許可權修飾
*
* 另一方面,作為一個類:
* > 類內可以定義屬性、方法、構造器等
* > 可以被final修飾,表示此類不能被繼承。言外之意,不使用final,就可以被繼承
* > 可以被abstract修飾
*
*
* 4.關注如下的3個問題
* 4.1 如何例項化成員內部類的物件
* 4.2 如何在成員內部類中區分呼叫外部類的結構
* 4.3 開發中區域性內部類的使用 見《InnerClassTest1.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{ } } }