2017-07-10 80 views
1

如果一個類的可見性包是私有的,是否還有任何要點設置方法具有該可見性,因爲您無法首先訪問這些方法?包私人訪問修飾符

+0

簡短的回答是否定的,沒有意義。 –

+2

如果將來改變類的可見性,它可能會阻止未來訪問這些方法, – Nicolas

+0

是的,有一點。有人可能能夠通過反射來獲取方法,如果它們是公開的,甚至在禁止'setAccessible'調用的SecurityManager下運行。一般來說,如果有些東西不是爲了公共使用,請不要公開。 – VGR

回答

1

例如,包私有類可能會實現一些接口並在包的外部使用。在這種情況下,實施的方法應該是public。您也可以通過private訪問修飾符來限制同一包中某些成員的使用。

package pkg1; 

public interface SomeInterface { 
    void m(); 

    public static SomeInterface getImplementation() { 
     return new A(); 
    } 
} 

class A implements SomeInterface { 
    @Override 
    public void m() {} 

    public void m2() {} // this one cannot be called from other packages 

    private void m3() {} // this one might be used only in class A 
} 

package pkg2; 

import pkg1.SomeInterface; 

public class Main { 
    public static void main(String[] args) { 
     SomeInterface implementation = SomeInterface.getImplementation(); 
     implementation.m(); 
    } 
} 
0

簡單的回答是,如果一個類將要實施或擴展。不,如果它不會被延伸或實施。如何強烈建議仍然製作不希望其他課程看起來是私密的方法或變量。如果您希望更改類的可見性,並在長期運行時使代碼更易讀,這將節省以後的時間。