簡體   English   中英

在私有內部類的字段的訪問修飾符中是否有任何意義?

[英]Is there any sense in access modifiers for fields of the private inner class?

假設我有一個帶有內部類的外部類。 內部類有四個字段,包含所有可能的訪問修飾符。

class Outer {
    private class Inner {
        public int publicField;
        protected int protectedField;
        int packagePrivatefield;
        private int privateField;
    }

    void doSomethingWithFields() {
        Inner inner = new Inner();
        inner.publicField = 111;
        inner.protectedField = 111;
        inner.packagePrivatefield = 111;
        inner.privateField = 111;
    }
}

內部類是私有的,所以我不能在Outer類之外創建它的實例。 在Outer類中,如果我創建內部類的實例並嘗試更改每個字段的值,我將成功地執行此操作。 所以我看到上述字段的訪問修飾符沒有任何意義。 在那兒?

編輯:主要問題是: 我應該為私人內部成員選擇哪些訪問修飾符? 內部類不僅可以實現接口。 我可以把一些帶有邏輯的困難結構放進去。

訪問修飾符在繼承中有發言權。 擴展您所談論的類的另一個內部私有類沒有外部類的特權。

public class Main {
    private class Test {
        protected int hello;
    }
    private class TestNext extends Test {
        private TestNext() {
            this.hello = 1;
        }
    }
}

將編譯,但如果hello私有,它不會。

是的,如果內部類是私有的,那就沒有意義了。

但請記住,內部類通常不是很漂亮,您應該使用包將多個類組合在一起。

是。 你是對的。 但是只有你有單一的嵌套內部在私有內部類中擁有各種訪問修飾符之間沒有區別。 課堂上沒有任何東西可以看出來。 但是如果你有另一個嵌套的內部類,那么你的訪問修飾符就很重要了。 例如

class A{
   private class B{
      class C{}
   }
}

在這種情況下,B類的字段和方法訪問修飾符將很重要

如果內部類沒有實現任何接口或繼承,那么就沒有必要指定訪問修飾符。

如果內部類繼承了某些內容,那么它在該上下文中確實有意義。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM