Java語言基礎-內部類

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 {

        }
      }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章