java成員內部類


在閱讀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();    
    }
}

還是不會

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM