interface
メソッドを実装すると、public
メソッドにする必要があります。
default
(同じパッケージ内でアクセスする場合など)またはprotected
を使用したい場合があります。
誰でもこの制限の背後にある理由を説明できますか?
インターフェイスは、型のpublic APIを定義するためのものであり、それだけであり、その実装ではありません。したがって、インターフェースで定義するメソッド(または静的メンバー)は、public
の定義によるものです。
インターフェースには具体的な実装を含めることができないため、内部からメンバーメソッドを呼び出す方法はありません。そして、そのようなメソッドを宣言するが、それらへの呼び出しをサブクラスまたは完全に無関係なクライアントに任せることは、型定義が不完全で壊れやすいことを意味します。そのため、保護されたメンバーまたはパッケージアクセスメンバーを定義する必要がある場合は、抽象クラス(実装も含まれている場合があります)で定義できます。
多分 this はいくつかの答えを提供します。
私の知る限り、あなたはinterfaces
を使用して、コードの外部からの人々がコードと相互作用できるようにします。これを行うには、メソッドpublic
を定義する必要があります。
特定のプライベートメソッドのセットをオーバーライドするように強制したい場合は、一連の抽象保護メソッドを含む抽象クラスを宣言することができます。
インターフェースは、それを実装するクラスがインターフェースにメソッドを持つことになるコントラクトです。インターフェイスは、このクラスにメソッドがあり、それらが呼び出されることをプログラムの残りの部分に示すために使用されます
編集:この回答は、C#インターフェイスの実装を対象としています。このJava=の場合、シナリオは、構文アナライザーがインターフェースで言及されているパブリックキーワードを必要とするだけで、C#で暗黙的に行われます。
インターフェイスメソッドはC#では暗黙的にパブリックです。これは、インターフェイスが他のクラスで使用されることを意図したコントラクトであるためです。さらに、インターフェースを実装するの場合、静的ではなく、これらのメソッドをpublicにするを宣言する必要があります。
_interface IStorable
{
void Read( );
void Write(object obj);
}
_
Read( )
およびWrite( )
のIStorable
メソッド宣言には、アクセス修飾子(public
、protected
..)が含まれていないことに注意してください。実際、アクセス修飾子を指定すると、コンパイルエラーが発生します。
_class Document : IStorable
{
public void Read( )
{
//
}
public void Write(object obj)
{
//
}
}
_
インターフェースをContractsとして実装し、public
として実装することを考えてください。