質問

ま利用継承してしまっているんですけどいったものを保護属性だと思うかられていますが、封止を継承します。

を使用していま保護属性?何に使うのですか?

役に立ちましたか?

解決

この 面接 デザインによる法案Vennersジョシュアブロッホの著者 有効なJava "と言ってい

信頼のサブクラス

Bill Venners: う信頼のサブクラスはより親密によ 非サブクラス?例えば、いく やすいサブクラス の実装を提案いたしま うための非ラスのサブクラス?に 特についての感想を聞かせてください 保護データはもらえますか?

ジブロッホ: ものを書きるsubclassableロ に対して悪意のあるサブクラスです 実はかなり厳しいで良いこと ときのサブクラスアクセス にお客様の内部データ構造です。の場合 のサブクラスはアクセス 何をするにも通常のユーザー しないでく、 サブクラスにいます。がない限り、 すべてのお手法の最終の サブクラスでもお休み 契約のように間違った ことへの対応方法 呼び出し.だからこそ、 安全重要な授業のように文字列 は、最終的なものとする。その他の人が 書きるサブクラスが文字列 表示の変更可能な、 のに十分な休憩です。です なおサブクラス.の場合 なを信頼して、そのまま呼び込むことができ がサブクラスではそう簡単に causeのクラスに違反するその 契約します。

て保護されデータは一般的に、 で必要なよう。あるべきで 最小限にしなければならない。最もデータ保護 保護法の額 めに実装 ます。保護された分野である 実装の詳細ま 可視化をサブクラス.でも 保護の方法は 内部構造となっており に見えるサブクラス.

理由は何で見る それは多くの場合必要となるために サブクラスを、い です。だっ では、追求し続けています。今では うことはできません 変更の場合でも、後日あり 効率的に実施する 長術の 特定の分野や方法。

すべてのものが同じ場合には、 ない保護委員 ます。ただ、そうは言ってもすぎる場合は 数、クラスが利用できない場合があり スーパーサイエンスハイスクールのクラスは、少なくともしないとして 効率的なスーパークラスです。いることが多い すぐ後であること。私の経営理念 は少なくして、保護メンバー できる限り最初の クラスです。そのサブクラスです。す あるべることなく、特定の 保護の方法、すべてのサブクラスです いい悪いことであると考えていた。

例として見れば AbstractList, することが 保護された方法を削除するには 範囲のリストをワンショット (removeRange).なぜここにありますか?なので通常熟を削除するには 範囲に基づき、公開APIには、 電話 subList 取得のサブList, を呼び出 clear その サブList.この特定 保護の方法では、み るもの clear がない 繰り返してくださです。

しかしよく考えてください。いる配列 表現はどうですか?で まで繰り返し破壊の配列 うにするすべての作業Nます。その 取り次の量を、 ではなく線量の ることです。により提供されるこ 保護の方法をすること 実装で効率よく回ることができ 削除した全てください。や あらゆる合理的な List 実施 を削除することが可能で範囲をより効率的に ます。

が大きく変わってしまうことがありこの保護 方法は何かについ にする予定のスマートしていい フロントです。基本的には、実施の いことです。そして、どのサブクラス できたことに気づきました範囲を削除した quadratic.いく余裕はないが、 くつろぎいただけますの保護方法。と思い このアプローチ 保護されます。入数 を可能にし、その後追加しています。保護の方法を表す 約束デザインす 変更したい.きのいずれであっても、常に付加 保護の方法で受けることができな んで頂きたいと思います。

Bill Venners: 保護データはもらえますか?

ジブロッホ: 同じものです。保護データをも 危険のご相談 データ不変量.まgive someone 他のキャンセルの内部データ そして飛行機内で"プラダを着た悪魔"になります。

ショートバージョン:がまとめられることにより、封止が必要悪すべき最小限にしなければならない。

他のヒント

C#:

使っている保護対象の仮想方法にておきたいベースの授業をオーバーライドす.もう方法で保護された場合によって呼び出されベースの授業がいいという外部のクラス上位の階層となります。

合に必要とな静的(もしくは"グローバル')属性を利用したいサブクラス又はクラスのパッケージの場合にはjava)が利益を得ます。

その静的最終属性を表すなどの一定の値であるほど、ゲッター機能で保護されたstatic final属性といったような感覚になる場合があります。

スコットMeyersと 利用には保護属性の有効なC++(3rd ed.):

項目22:を宣言するのにデータメンバーです。

その理由は同じです。がまとめられることにより、encapsulations.その結果はその地域のレイアウトのクラスが変種変更を多くれています。

ません足りる相当の理由があって保護されます。基底クラスできることが必要に依存する状態、手段へのアクセスを制限するデータを通じてアクセス用メソッドます。まだ誰でもアクセスにプライベートデータでも、子どもたち。

protected キーワード概念の誤り、言語のデザインbotch、複数の現代語-現代など、ビン電源、セイロン( http://ceylon-lang.org/documentation/faq/language-design/#no_protected_modifierとして設計だけではなく複製に共通のミスについてお答えくださいなどをすることをお勧めします。

で保護されていない会員に休憩を封止では、露出メンバーな露出を切り封止...なかで保護されてはいます。の問題 protected こwrongheaded、誤解を招く...宣言員 protected (というより private な保護し、その逆の、ど public います。保護された会員は、アクセス以外のクラスは世界で、その意味の維持が必要、との場合 public.の発想では考えられない"保護"はナンセンス...封止ではないセキュリティ、キーワードだけでfurthersの混乱の間はご対応できませんすることができ少しでも回避すべての利用 protected 自分の授業--な場合は内部に実装さんのクラスの意味とは今後変わる可能性があり、その後で私は内部をパッケージには、モジュール、組立、など。であれば、変わらぬ部分のクラスの意味、その後で公開しませんの迷惑にユーザーのクラスで見ることが有の会員に文書で使用できませんので、それらをインスタンスを取り囲むようにする場合は、サブクラス.

使わない保護属性をJavaでのパッケージ保護されます。でもC++でも利用抽象クラスを継承クラスを継承しています。

総じて、まねを利用したい保護データを会員とする。これは二重の場合にtrueをお書きるAPIに含まれています。一人を継承クラスできるんですがメンテナンスを行なっても、時には野生ます。

と思い保護属性が悪いアイデアです。使ってい CheckStyle 執行するルールとJava開発チームあります。

私は最近手がけプロジェクトの"保護"した委員は、非常に良い方法がありました。クラスのhiearchyしたようなもの:

[+] Base
 |
 +--[+] BaseMap
 |   |
 |   +--[+] Map
 |   |
 |   +--[+] HashMap
 |
 +--[+] // something else ?

ベースの実施std::リストのものです。ダイレクトにアクセスのリストを禁止ユーザーが、基底クラスが完了しなかったので確かなどの派生クラスの実施の間接指定します。

間接参照が来てから少なくとも二味:std::マstdext::hash_map.両方のマップの動作と同じなのですが、hash_mapのニーズが重要hashable(VC2003,キャスタブルへのsize_t).

でBaseMap行TMapとして分子を鋳型としたタイプでした地図よ。

地図は、HashMapにした派生クラスのBaseMap、専門BaseMapにstd::地図、その他のstdext::hash_map.

い:

  • ベースませんでしたとして使用できるような不公accessors!) やたばかりでなく、共通の特徴やコード

  • BaseMapに必要な簡単に読み取り/書き込みは、std::一覧

  • 地図は、HashMapに必要な簡単に読み取り/書き込みアクセスのTMapで定義されBaseMap.

私にとっての唯一のソリューションで使用した保護のために、std::リストのTMapメンバ変数.しようもないわけではないしその"個"のでとにかくすべてのほとんどすべてのその特徴を読み取り/書きaccessorsます。

最終的に、と思ったりしていまjaまでの分割クラスに複数のオブジェクトでは、各由の追加に必要な機能をその母親クラスのみの派生クラスも使用可、その保護にかかるものと思われます。る利用という面があったのである"保護委員"のクラスでは、ほぼ不可能なので"break",手助けになるかもしれません。

なので、保護避けてください(例:個人デフォルトでは、公共の場合ださい。

使っています。で、でたい場合には一部の属性を共有します。付与され、書き設定または取得機能であって、がない場合、検証、そして何ですか?でも高速に行います。

このことを考え:するクラスでは基底クラスです。ではかなりの数の属性ですwanんの子オブジェクト。また書の取得/設定機能、またはできるだけで設定します。

私の代表的な例は、ファイル/ストリームハンドラです。アクセスさせたい、ハンドラー(ファイル記述子が非表示にすするようになりますので、。この方法や書き設定または取得機能です。

一般に、そうです。保護された方法は、通常ります。

使用、レベルもそれらを利用した保護され 最終 変数オブジェクトに共有されるすべての子どもたちは、クラスです。私は常に助言を使用すプリミティブは、デスクからの契約不可能な定義の方です。

最近私の分別ものだとプリミティブの原料から集められたものだとさせます。プリミティブやコレクションだきます。

また、開始時に露出公共のメンバ変数がdeclaired最終的には以下の点にご注意下さ-形成されていないクラスも柔軟なものになプリミティブまたは収集した.

こないろショートカット、と思ったので写真剣に決定したものではありません公開 最終 変数露オブジェクト、ゲッター.

Itによって異なります。したい場合は高速クラスのデータは保護されるべきでの使用保護および公的ます。だと思うからできるとご利用者からのクラスをお知らのクラスのものとなっておりマニュアルの機能とうございますのオーバーライド.

ご利用者堂とクラスではありません。毎悪意のあるユーザを追加でき、以下のラインが策のvirtuals:

(C#)

static Random rnd=new Random();
//...
if (rnd.Next()%1000==0) throw new Exception("My base class sucks! HAHAHAHA! xD");
//...

できないシールすべてのクラスを防止す。

もちろんしたい場合に制約の一部の分野に利用し、アクセス用メソッドの機能又は特性もいただきる分野に民間がありませんのその他のソリューション...

私の個人的なこだわりのoop原則です。特に作物件の目的のデータメンバーです。

C#のサンプルソースコード):

private _foo;
public foo
{
   get {return _foo;}
   set {_foo=value;}
}

これは私の個人的な意見を出しました。

だんごボスが必要だいたいのprivateいます。)

使っている保護変数内の属性ベースの授業のことを知っていないプランに変更。そうやって、サブクラスに対してフルアクセスを継承した変数は少ない(人工的に作り出されたオーバーヘッドのsetterか/セッターにアクセスします。たとえば、クラスを用いるI/Oストリームいることを許可しないサブクラスで直接アクセスの基本となるストリームです。

こちらはメンバ変数が使用されている直接シンプル内の基底クラスおよびすべてのサブクラス.が変動する複雑な利用例、アクセスの原因となる副作用の他のメンバー内のクラスは、直接アクセスができます。この場合には、できる民間-公共/保護setterか/セ供が可能です。例の内部バッファリング機構による基底クラスでは、アクセスバッファから直接サブクラスを損なうの完全性を使用するアルゴリズムによる基底クラスを管理します。

このデザインの判断の決定に基づかなければならないルマの重要なコミュニケーションのメンバー変数がどのようなので、将来のバージョン

封止ができます。見ての授業が自分のprivateメソッドにアクセス、そのメンバ変数のみを使用しgetter/setterます。これは失わせないアイテムからの場合、クラスなのか信用できなプライベ法人データをできるのでだろう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top