1. 程式人生 > >java成員內部類

java成員內部類

args 閱讀 依賴 初始 vat clas div 而且 str

在閱讀JAVA一些數據結構源代碼的時候,經常會發現成員內部類的使用,如Hashmap中的Node和TreeNode,所以我們就來把它歸納總結一下

1.成員內部類

(1)內外部的訪問權限

構造一個外部類和內部類

public class Out {
    private String str="outStr";
    private void print()
    {
        System.out.println(str);
    }
    private class In{
        public String inStr="inStr";
        public
void test() { System.out.println(str); print(); } } }

測試

public static void main(String[] args) {
        Out out=new Out();
        Out.In in=out.new In();
        in.test();
    }

技術分享圖片

技術分享圖片

結果說明內部類可以任意訪問外部類的成員函數成員變量,而外部類不能隨意訪問內部類的成員等

另外內部類是可以有修飾符的 比如這裏是private,但也竟然成功了

(2)內部類會在外部類初始化的時候被初始化嗎?

public class Out {
    public Out()
    {
        System.out.println("out");
    }
    public class In{
        public In()
        {
            System.out.println("in");
        }
    }
    
    public static void main(String[] args) {
        Out out=new Out();
    }

}

技術分享圖片

很顯然不會

(3)內外部方法名沖突時的處理方法

public class Out {
    public void test()
    {
        System.out.println("out");
    }
    public class In{
        public void test()
        {
            System.out.println("in");
        }
    }
    public static void main(String[] args) {
        Out out=new Out();
        Out.In in=out.new In();
        in.test();
    }

}

技術分享圖片

顯然調用內部類自己的,外部類的方法被隱藏掉了

2.靜態成員內部類

(1)內外部的訪問權限

public class Out {
    private String str="outStr";
    private static String static_str="static_str";
    public static class In{
        public void test()
        {
            System.out.println(static_str);
        }
    }
    
    public static void main(String[] args) {
        //Out out=new Out();
        In in=new In();
        in.test();
    }
}

技術分享圖片

技術分享圖片

結果表明現在內部類只能調用外部類的靜態成員了,而且此時內部類的初始化也不再完全依賴於外部類了

(2)內部類會在外部類初始化的時候被初始化嗎?

public class Out {
    public Out()
    {
        System.out.println("out");
    }
    public static class In{
        public In()
        {
            System.out.println("in");
        }
    }
    
    public static void main(String[] args) {
        Out out=new Out();    
    }
}

技術分享圖片

還是不會

java成員內部類