2012-01-11 13 views
3

私はSCJPをKathy SierraとBert Batesによって読んでいます。 21 that "パブリック修飾子は、インターフェイスにデフォルトアクセスではなくパブリックにする場合に必要です"。これは本当ですか?もしそうであれば、インタフェースメソッドは(常にpublicである)インタフェースが実装クラスの同じパッケージにある場合にのみアクセス可能です...?それはデフォルトのアクセス修飾子の意味なので、私は少し混乱しています。インターフェイスにアクセス修飾子を指定しないと、そのインターフェイスにデフォルトのアクセス権が設定されます。

+4

*インターフェイス*にパブリックアクセスを許可する場合は、そうする必要があります。ただし、インターフェイスの個々の*メンバ*は常に公開されています。 – cHao

+0

例えば、インタフェース自体にデフォルトのアクセス権がある場合、そのメソッドは実装されているパッケージの外でどのように使用されますか?その場合のインタフェースは実装クラスには見えません。デフォルトのアクセス権がある場合、そのメソッドがpublicになる理由は私には意味がありません:-( – user1142130

+0

パッケージは他のどのクラスからも参照可能です。外部ユーザーはインターフェイスを使用することができません - 既定のアクセスは事実上「内部使用のため」ですが、クラスで公開されるように定義されたメソッドを呼び出すことができます。もちろん、クラスは公開されています。 – cHao

答えて

2

インターフェイスにアクセス修飾子を指定しないと、そのインターフェイスはデフォルトアクセス権を持ちますか?

はい、該当します。 Javaの型/フィールド/メソッド(クラス内)は、アクセス修飾子が指定されていない場合、パッケージレベルのアクセス権を持ちます。 inteface型で定義されたメンバは、デフォルトでpublicです。

チュートリアル - Controlling Access to Members of a Classを読んでください。ここでinterface

1

自体はpackage protectedですが、方法はinterfacepublicだけでなく、あなたは、彼らが意味public void bar();void bar();宣言することができ

public interface Foo 
{ 
    void bar(); // this is always public and nothing else 
} 

方法である

interface Foo 
{ 
    void bar(); // this is always public and nothing else 
} 

ここでは、デフォルトでは常にpublicです同じこと、個人的に、私はいつもpublicを入れます。ex明示的なは常によりも暗黙的です

関連する問題