コードクラス宣言のメンバインターフェイスは暗黙的にpublicになっていますか?
私はメンバーインターフェイスで次のクラスがあります。
package com.example.withinterface;
public class SomeClass {
interface SomeInterface {
void doSomething();
}
}
とそれにアクセスしようとしている別のクラス:主に
package com.example.withinterface.main;
import com.example.withinterface.SomeClass;
public class Main {
public static void main(String[] argss) {
System.out.println(SomeClass.SomeInterface.class);
}
}
エラー
をjavacから次のエラーが表示されます。SomeInterface is not public in SomeClass; cannot be accessed from outside package
。
Eclipseでは:SomeInterface is not public in SomeClass; cannot be accessed from outside package
です。
どちらもJava 7としてコンパイルしています。SomeInterfaceを作成するとすべてがコンパイルされますpublic
。
しかし仕様が
はJava Language Specification for Java 7言い、これは言う:
メンバーインターフェイスは、その宣言直接 が別のクラスまたはインタフェース宣言で囲まれているインターフェースです。
アクセス修飾子が指定されていない限り、クラス宣言のメンバーインターフェイスは暗黙的にパブリック(§6.6) です。
Java Language Specification for Java 5は、2番目の文を持っていないようです。
質問
のでSomeInterface公共考えるべきではないと主がコンパイルされないでしょうか?
更新Ajay Georgeによって示唆されるように
が、これは確かにan error in the Java Language Specification 7(感謝JamesB)でした。その間、仕様は修正され、間違った文が削除されました。 Last version in Archive.org with the incorrect sentence。
hh。特に断らない限り、私はいつも全てがパッケージ保護されているとみなしていた私は新しいことを学んだと思う。 –
これは、アクセス修飾子を持たないメンバーがパッケージにアクセスできるためだと思います。だから他のパッケージでは使用できません –
@Desolatorあなたはその質問を読んだことがありますか?メンバインタフェースは**デフォルトでpublicです**。 –