Java のすべてのアクセス修飾子の違いを知っています。private
しかし、誰かが私に非常に興味深い質問をしてきましたが、その答えを見つけるのに苦労しました:インターフェースとpublic
Javaのインターフェースの違いは何ですか?特に、クラスメンバーとしてどのように使用されますか? どんな助けでも大歓迎です。
3 に答える
の使い方はみんな知っていると思いますpublic interface
ので、ここでポイントを述べておきprivate/protected interface
ます。
Interfaces
クラス定義のメンバーにすることができ、private
またはprotected
そこで宣言することができます。
public class Test {
private interface Sortable {
}
protected interface Searchable {
}
}
public class PrivateInterface {
private interface InnerInterface {
void f();
}
private class InnerClass1 implements InnerInterface {
public void f() {
System.out.println("From InnerClass1");
}
}
private class InnerClass2 implements InnerInterface {
public void f() {
System.out.println("From InnerClass2");
}
}
public static void main(String[] args) {
PrivateInterface pi = new PrivateInterface();
pi.new InnerClass1().f();
pi.new InnerClass2().f();
}
}
/* Output:
From InnerClass1
From InnerClass2
*/
パッケージプライベートにできるのはインターフェース自体であり、その中のメソッドではありません。定義されているパッケージ内でのみ (名前で) 使用できるインターフェイスを定義できますが、そのメソッドはすべてのインターフェイス メソッドと同様にパブリックです。クラスがそのインターフェースを実装する場合、それが定義するメソッドは public でなければなりません。ここで重要なのは、メソッドではなく、パッケージの外部からは見えないインターフェイスの型だということです。
インターフェイス宣言には、次のアクセス修飾子を含めることができます。
public protected private abstract static strictfp
public:インターフェイス タイプが public と宣言されている場合、任意のコードからアクセスできます。
protected/private:アクセス修飾子 protected と private は、直接囲んでいるクラス宣言内のメンバー インターフェイスにのみ関係します。Amember interface
は、宣言が別のクラスまたはインターフェイス宣言に直接囲まれているインターフェイスです。
static:アクセス修飾子static
は、最上位インターフェイスではなく、メンバー インターフェイスにのみ関係します。
abstract:すべてのインターフェースは暗黙的abstract
に です。この修飾子は廃止されており、新しいプログラムでは使用しないでください。
strictfp:修飾子の効果はstrictfp
、インターフェイス宣言内のすべての float または double 式を明示的にFP-strictにすることです。
参照: Java 言語と仮想マシンの仕様
インターフェイスのpublic
、private
、およびprotected
アクセス修飾子は、クラスで意味するのと同じことを意味します。通常、これらの修飾子は、クラスにネストされたインターフェイスで使用されます。このようなもの:
//: interfaces/RandomWords.java
// Implementing an interface to conform to a method.
package interfaces;
public class PrivateInterface {
private interface InnerInterface {
void f();
}
private class InnerClass1 implements InnerInterface {
public void f() {
System.out.println("From InnerClass1");
}
}
private class InnerClass2 implements InnerInterface {
public void f() {
System.out.println("From InnerClass2");
}
}
public static void main(String[] args) {
PrivateInterface pi = new PrivateInterface();
pi.new InnerClass1().f();
pi.new InnerClass2().f();
}
}