天天看點

Java 内部類、靜态類内部類

問: 什麼是内部類?

答: 内部類(Inner Class)就是在一個類的内部再定義一個類,與之對應包含内部類的類被稱為外部類。

問: 為什麼要将一個類定義在另外一個類内部呢?

答: 内部類主要作用如下:

  1. 内部類提供了更好的封裝,可以被内部類隐藏在外部類之内,不允許同一個包中的其他類通路該類。
  2. 内部類的方法可以直接通路外部類的所有資料,包括Private資料。
  3. 内部類所有實作的功能,使用外部類同樣可以實作,隻是有時候使用内部類更友善。

問: 内部類有幾種?

答: 内部類可以分為以下幾種:

  • 成員内部類
  • 靜态内部類
  • 方法内部類
  • 匿名内部類

  1、靜态内部類不能直接通路外部類的 非靜态成員,但可以通過 new 外部類().成員 的方式通路。

  2、如果外部類的 靜态成員 與内部類的 成員 名稱相同,可以通過“外部類.靜态成員”的方式通路。

  3、建立靜态内部類的對象時,不需要外部類的對象,可以直接建立:内部類 對象名 = new 内部類()

示例代碼:

public class Outer {
    private int a = 11;
    static int b = 22;
    int c = 33;

    // 成員内部類
    public class Inner {
        public void test() {
            System.out.println("通路外部類中的a:" + Outer.this.a);
            System.out.println("通路外部類中的b:" + Outer.b);
            System.out.println("通路外部類中的c:" + c);
        }
    }

    // 靜态内部類
    public static class SInner {
        public void test() {
            System.out.println("通路外部類中的a:" + new Outer().a);
            System.out.println("通路外部類中的a:" + b);
            System.out.println("通路外部類中的a:" + new Outer().c);

        }
    }

    // 成員内部類
    public void Show() {
        int score = 88;
        class SInner {
            public int getScore() {
                return score + 10;
            }
        }

        // 建立方法内部類的對象
        SInner si = new SInner();
        System.out.println("調用方法内部類的score:" + si.getScore());
    }

    public static void main(String[] args) {
        // 建立成員内部類的對象時,需要通過外部類的對象 out.new來建立 内部類對象
        Outer out = new Outer();
        Inner in = out.new Inner();
        in.test();

        // 建立靜态内部類的對象時,可以直接建立内部類對象
        SInner si = new SInner();
        si.test();

        // 調用方法
        out.Show();
    }
}      

繼續閱讀