0

メソッド宣言で public private protected キーワードを使用する利点は何ですか?

特定のクラス外のオブジェクトによる不要な「値の変更」を防ぐため、変数の public private protected キーワードの利点を想像できます

しかし、メソッド宣言にキーワード「private」または「public」または「protected」を入れることの利点は想像できません。

メソッドがある場合、そのメソッドを使用できる唯一のオブジェクトは、とにかくそのメソッドを含むオブジェクトであると私は信じていますか?

4

3 に答える 3

3

まず、、、パッケージ、およびpublicアクセスの意味を明確にしましょう。いずれの場合も、非静的メソッドを使用するにはオブジェクトが存在する必要があることは正しいです。ただし、これらのキーワードは、オブジェクトのメソッドを呼び出すことが誰に許可されているかを示します。protectedprivate

  • publicメソッドは誰でも呼び出すことができます。
  • protectedメソッドは、同じパッケージ内の任意のクラスまたは他のパッケージ内のサブクラスから呼び出すことができます。
  • パッケージのプライベート メソッド (アクセス修飾子なし) は、同じパッケージ内のクラスによってのみ呼び出すことができます。
  • privateメソッドは、同じクラスによってのみ呼び出すことができます。

例として、私はprivateメソッドを使用してコードを除外することがよくありますが、そうでなければいくつかの異なるメソッド間で繰り返されます。このコードは、他のクラスが使用するパブリック インターフェイスの一部ではありません。むしろ、クラス自体の内部でいくつかの計算を行う「ワーカー」メソッドです。

于 2013-02-17T22:44:41.110 に答える
2

publicは、メソッドをオーバーライドできることを意味し、囲んでいるクラスが表示されるすべてのコードで使用できます。

privateは、メソッドが外側のクラスによってのみ使用可能であることを意味します。

protectedメソッドは、それを囲むクラス、およびそのクラスを拡張するすべてのクラスによってのみ呼び出すことができることを意味します。

package (メソッドの前にキーワードを指定しない) は、そのメソッドが、外側のクラスと同じパッケージ内のクラス内の任意のコードによって呼び出されることを意味します。

Java では、デフォルト、パブリック、プロテクト、およびプライベートの違い

これらのさまざまなキーワードは、クラスの使用方法を設計する際に役立ちます。 publicメソッドは、クラスのユーザーに公開する「契約」の一部です。 privateメソッドは通常、クラスのユーザーとの「契約」を破ることなく、将来交換または変更する場合に備えてそのロジックを非表示にする必要があるため、外部の世界に決して公開すべきではない実装コードです。

protectedメソッドは、クラスを拡張するクラスで使用できます。したがって、オーバーライドに使用できるようにしたい実装があるかもしれません-または、クラスを機能させるためにこのメソッドを実装する拡張クラスが必要かもしれませんが、クラスの呼び出し元に公開する「契約」の一部ではありませんまたは拡張クラスを呼び出すもの。

packageパッケージ内の他のクラスが呼び出すことができるが、(ユーザーとの「契約」の一部ではなく) クラスを使用する人に公開したくない実装コードを作成するために使用します。必要に応じて、パッケージ レベルのメソッドを使用します。単体テストからトリッキーな実装コードをテストしますが、メソッドを公開したくありません。

于 2013-02-17T22:45:00.663 に答える
2

メソッドへのアクセスを制限する利点を理解するには、次のことを考慮してください。クラスからメソッドを安全に変更または削除することもできprivateます。これは、そのクラス内からのみアクセスされることがわかっているためです。API を公開していて、publicメソッドを公開している場合、そのメソッドは永久に公開されます。変更しようとすると、使用可能であることを前提とするコードが壊れます。これを十分に理解するには、時間の経過とともにコードがどのように進化するかを考える必要があります。

メソッドがある場合、そのメソッドを使用できる唯一のオブジェクトは、とにかくそのメソッドを含むオブジェクトであると私は信じていますか?

いいえ、そうではありません。メソッドは静的に宣言できます。つまり、オブジェクトを呼び出す必要はありません。

于 2013-02-17T22:45:44.230 に答える