オブジェクト指向プログラミングでパブリック、プライベート、保護されているものは何ですか?


回答:


152

これらはアクセス修飾子であり、カプセル化(または情報非表示)の実装に役立ちます。これらは、定義されているフィールドまたはメソッドにアクセスできる他のクラスをコンパイラーに指示します。

private -現在のクラスのみがフィールドまたはメソッドにアクセスできます。

protected -このクラスの現在のクラスとサブクラス(および場合によっては同じパッケージクラス)のみがフィールドまたはメソッドにアクセスできます。

public -どのクラスもフィールドを参照したり、メソッドを呼び出したりできます。

これは、これらのキーワードがクラス定義内のフィールドまたはメソッド宣言の一部として使用されることを前提としています。


4
同じパッケージのJavaのメンバーは保護されたメンバーにアクセスできることに注意してください
Landon Kuhn

2
はい。Javaには、空の文字列である4番目のアクセス修飾子もあります。アクセス修飾子を指定しないと、パッケージレベルのクラスからのアクセスが許可されます。
ベンS

1
私が知っているほとんどの言語は、実行時に.NETのリフレクションなどを介して簡単にアクセスできるため、「コンパイラ」の部分が好きです。したがって、これらのアクセス修飾子は基本的に、プログラマーが特定のことを非表示にすることにより、同じコードで作業している/同じコードで作業している他のプログラマーを導くための単なる手助けとなると私は言いがちです。
merkuro、2009年

1
一部の言語にはいくつかの特殊性があります。Delphiと同様に、プライベートメンバーは同じユニットの他のクラスからアクセスできます。この動作を望まない場合は、厳密なプライベートを使用する必要があります。
Fabio Gomes、

1
C#は、同じパッケージのアクセス保護されたメンバーのトリックも行います。本質的に、C#は単なるMicrosoftのJavaです
iGbanam

6

これらは実際の概念ではなく、C ++やJavaなどの一般的な言語で(セマンティクスが少し異なる)傾向がある特定のキーワードです。

基本的に、それらはクラスがメンバー(フィールドまたは関数)へのアクセスを制限できるようにするためのものです。つまり、あるタイプで別のタイプへのアクセスが許可されているほど、作成できる依存関係が少なくなります。これにより、そのオブジェクトを参照するオブジェクトに影響を与えることなく、アクセスしたオブジェクトをより簡単に変更できます。

大まかに言えば、パブリックとはすべてのユーザーがアクセスを許可されていることを意味し、プライベートは同じクラスのメンバーのみがアクセスを許可されていることを意味し、保護とはサブクラスのメンバーも許可されていることを意味します。ただし、言語ごとに独自のものが追加されます。たとえば、C ++では、非公開で継承できます。Javaでは、デフォルト(パッケージ)のアクセスレベルもあり、内部クラスなどに関するルールがあります。


6

3つすべては、クラスで使用されるアクセス修飾子とキーワードです。publicで宣言されたものはすべて、クラス内またはクラス外のオブジェクトで使用できます。privateでの変数は、クラス内のオブジェクトでのみ使用でき、直接アクセスを通じて変更できませんでした(フレンド関数などの関数を通じて変更できるため)保護セクションで定義されたものはすべて、クラスとその派生クラスで使用できます。


1

パブリックアイテムは、他のクラスからアクセスできるアイテムです。あなたはそれがどんなオブジェクトであるかを知る必要があるだけで、それにアクセスするためにドット演算子を使うことができます。保護とは、クラスとそのサブクラスが変数にアクセスできるが、他のクラスにはアクセスできないことを意味します。変数を操作するには、getter / setterを使用する必要があります。プライベートとは、そのクラスだけが変数に直接アクセスできることを意味します。それ以外の場合は、そのデータにアクセスまたは変更するためのメソッド/関数が必要です。お役に立てれば。


1

上記と同じですが、定性的には:

private - least access, best encapsulation
protected - some access, moderate encapsulation
public - full access, no encapsulation

提供するアクセスが少ないほど、オブジェクトからリークする実装の詳細が少なくなります。この種のリークが少ないということは、オブジェクトのクライアントを壊すことなくオブジェクトの実装方法を変更するという点で、柔軟性が高い(別名「疎結合」)ことを意味します。これは本当に理解すべき基本的なことです。


0

要約すると、オブジェクト指向プログラミングでは、すべてがクラスとオブジェクトにモデル化されます。クラスには、プロパティとメソッドが含まれています。public、private、およびprotectedキーワードは、他のクラス、他の.dll、または他のアプリケーションからも、クラスのこれらのメンバー(プロパティおよびメソッド)へのアクセスを指定するために使用されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.