2017-07-10 18 views
1

クラスに可視性パッケージprivateがある場合は、最初にメソッドにアクセスできないため、その可視性を持つメソッドを設定する必要はありますか?パッケージプライベートアクセス修飾子

+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

単純な答えは、クラスが実装または拡張される場合です。拡張または実装されない場合はいいえ。他のクラスがプライベートであることを見たくないメソッドや変数を作成することを強くお勧めします。クラスの可視性を変更したい場合は、後で時間を節約し、長期的にはコードをより読みやすくします。