1. 程式人生 > >Java內部類和內部介面

Java內部類和內部介面

內部類定義

  • 將一個類的定義放在另一個類的內部. 這就是內部類.
  • 內部類依賴外部類存在.

內部類訪問訪問許可權

  • public:訪問不受限制。
  • protected:訪問僅限於包含類或從包含類派生的型別。只有包含該成員的類以及繼承的類可以存取.
  • protected internal:訪問僅限於當前程式集或從包含類派生的型別。
  • private:訪問僅限於包含型別。只有包含該成員的類可以存取.

內部類種類

  • 靜態內部類static inner class (also called nested class)
  • 成員內部類member inner class
  • 區域性內部類local inner class
  • 匿名內部類anonymous inner class

內部類的特性

  • 它可以把一些邏輯相關的類組合起來,並控制內部的類的 可見性. 這個是內部類一種隱藏機制.
  • 內部類瞭解外部類,並能與之通訊.

靜態內部類

  • 類定義時加上static關鍵字,不能和外部類有相同的名字。   
  • 名稱為OuterClass$InnerClass.class的形式.
  • 只可以訪問外部類的靜態成員和靜態方法,   
  • 包括了私有的靜態成員和方法。   
  • 生成靜態內部類物件的方式為:
     OuterClass.InnerClass inner = new OuterClass.InnerClass();

成員內部類

  • 成員內部類Member Inner Class
  • 成員內部類也是定義在另一個類中,但是定義時不用static修飾。
  • 成員內部類和靜態內部類可以類比為非靜態的成員變數和靜態的成員變數。
  • 成員內部類就像一個例項變數。
  • 它可以訪問它的外部類的所有成員變數和方法,
    不管是靜態的還是非靜態的都可以。
  • 在外部類裡面建立成員內部類的例項:
    this.new Innerclass();
  • 在外部類之外建立內部類的例項:
    (new Outerclass()).new Innerclass();
  • 在內部類裡訪問外部類的成員:Outerclass.this.member

區域性內部類

  • 區域性內部類定義在方法中,比方法的範圍還小。
    是內部類中最少用到的一種型別。
  • 像區域性變數一樣,不能被public, protected, private和static修飾。
  • 只能訪問方法中定義的final型別的區域性變數。
  • 區域性內部類在方法中定義,所以只能在方法中使用,
    即只能在方法當中生成局 部內部類的例項並且呼叫其方法。

匿名內部類

  • 匿名內部類不能有構造方法。
  • 匿名內部類不能定義任何靜態成員、靜態方法。
  • 匿名內部類不能是public,protected,private,static。
  • 只能建立匿名內部類的一個例項。
  • 一個匿名內部類一定是在new的後面,用其隱含實現一個介面或實現一個類。
  • 因匿名內部類為區域性內部類,所以區域性內部類的所有限制都對其生效。

內部類的特性

  • 內部類如何實現隱藏程式碼實現的功能.
interface DemoInterface{
    public void getStringDemo();
}

public class Demo1{
    private class DemoOne implments DemoInterface{
        public void getStringDemo(){
            return "abcdefg";
        }
    }
    public DemoInterface getDemoInterface(){
        return new DemoOne();
    }
}

public class TestMain(){
    Demo1 demo = new Demo1();
    DemoInterface demointerface = demo.getDemoInterface();
    System.out.println(deominterface.getStringDemo());

}