內部類

在類中可以有屬性,方法,構造方法,靜態和非靜態塊還有內部類。

在一個類的內部去定義另一個類。

內部類可以用public,protected,default,private修飾。

是完全不同的兩個類,擁有自己獨立的字節碼文件

外部類名內部類名.class  --- OuterClass$InnerClass.class

 

  • 外部類只能用public ,abstract ,final,不寫 修飾

  • 構造方法只能用public,private,protected,不寫 修飾

  • main方法必須是public修飾,final也可以修飾main

1.靜態內部類

static修飾,不能訪問外部類的非靜態屬性和方法

OutClass.InnerClass in=new OutClass.InnerClass();

2.成員內部類

可以訪問外部類的所有成員屬性和方法(private也可以)

成員內部類不能定義static屬性和方法

在使用時必須先創建外部類的對象

OutClass out=new OutClass();

OutClass.InnerClass in=out.new InnerClass(); 

3.局部類部類

定義在某個方法中的內部類

可以訪問外部類的所有成員屬性和方法

局部內部類不能用public,static修飾,不能有static屬性方法

只能在所在作用域內實例化

並且可以訪問有final修飾的外部類的的局部變量

public void test(final int i){
      classInner{
            publicvoid show()  {i}
	   }
}

4.匿名內部類

一個特殊的局部內部類

直接繼承一個類(抽象)或實現一個接口時使用

該類的實例(對象)只能使用一次

不能加修飾符,不能定義構造方法(沒有類名)

 
    public static void main(String[] args) {
        
        Animal cat=new Animal(){
//                             {.......................
            @Override
            public void eat() {
                System.out.println("cat吃魚...");
            }
        };
//  ....}  類體
        cat.eat();
        // 輸出:cat吃魚...
        //這裏只是創建了Animal接口,並沒有創建Cat類
    }

Animal 是一個接口

發佈了42 篇原創文章 · 獲贊 2 · 訪問量 7947
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章