2015-01-13 78 views
1

例如,我有A類,B類,C類 A類有5個實例變量。 B類和C類都擴展到A類。 B類可以訪問所有成員,而C類只能訪問2個成員?只要它們在同一個包中。是否可以限制某個類的某些成員訪問另一個類而不是所有其他類?

+1

不,這是不可能的。你可能想重新設計你的課程。或者,請不要使用C類的「禁止」成員。 –

+1

不,這違背了繼承和糟糕設計的氣味。 – Brian

+0

我希望看到更多關於你想要完成的事情。另外,如果'C'在同一個包中,爲什麼要限制訪問三個成員 - 而不是僅僅是自我約束?你是否擔心後來修改課程並搞亂了某些東西?不像有些人,我不願意宣稱這是一個「糟糕的設計」而沒有看到細節 - 我可以設想在某些情況下這可能是合法的設計。但我想看更多的信息。 – ajb

回答

1

這是可能的。製作3個字段private並製作B a static嵌套類A。然後B可以訪問A的所有成員,如果您投到A。像這樣:

public class A { 

    private int a = 1; 
    private int b = 2; 
    private int c = 3; 
    int d = 4; 
    int e = 5; 

    public static void main(String[] args) { 
     new B().test(); 
    } 

    private static class B extends A { 

     private void test() { 
      System.out.println(((A) this).a); 
     } 
    } 
} 
+0

這似乎是可行的,所以我試了一下。靜態內部子類仍然無法訪問其外部超類的私有實例變量。這是在Java7中。 – gknicker

+0

@gknicker謝謝。我糾正了我的答案。 –

相關問題