• 締切済み

可視性の必要性

yokozawaの回答

  • yokozawa
  • ベストアンサー率50% (1/2)
回答No.6

>どのようなときにどれを使えばいいのか >具体的なシチュエーションを教えて欲しいです これは、なかなか文章では難しいです。 アクセス制御は、バグ対策が主な目的です。 アクセス制御のありがたさは、 短いプログラムでは、あまり感じられない事でしょう。 つまり、クラスをたくさん作るようなプログラムにおいて 特に価値があります。 なのでここでは、アクセス制御の使い方の例を紹介します。 private:基本的に全てのメンバ変数は、     private指定にしておくべきでしょう。     privateなメンバ変数を、     他のクラスから書き換えたいのならば、     それ専用のメソッドを用意しましょう。     これは、めんどくさく感じますが、     他のクラスから、     全てのメンバ変数にアクセスするわけではありません。 protected:これは、親クラスを継承した、      子クラスでアクセスする変数に対して使います。      当然、親クラスを継承していないクラスからは、      アクセスできません。 しかし、Javaのprotectedは、C++と違って同じパッケージの中なら、どのクラスからでもアクセスできるので、私は、変な仕様だと思っています。 public:ちゃんと作ればpublicを使用する機会は、     あまり無いでしょう。 しかし、プログラム全体で利用する定数を定義する時に使えます。    例えば、定数のみを定義したクラスを作った時などです。     そもそも変数に対するアクセス制御は、バグを防ぐためです。     しかし、定数は書き換えが出来ませんから、     この場合は、問題ないわけです。     ちなみに定数は、final指定子をつければ実現可能です。     public final int MAX_NUM = 5;     また、public指定により、     違うパッケージからでもアクセスできます。 package(指定なし):ご存知でしょうが、          同じパッケージ内のクラスならアクセスできます。 ---------------------------------------------------------------- 以上を総合して考えると、 ryunan_198さんが、必要性がわからないとおっしゃるのも わかる気がします。特にprotectedの仕様が疑問です。 個人で、趣味や学習で作る程度ならば、 private以外は、事実上大差がありません。 仕事や、個人でも大規模なプログラムを作る時には、 重要になってきます。

関連するQ&A

  • 修飾子 private protected

    Java での話です。 自分自身とサブクラスからのみアクセスできる変数は作成することはできないのでしょうか。修飾子 private protected の組み合わせは廃止されたようなのですが。 C++ だと、protectedで良かったと思うのですが、Java では同一パッケージからアクセスできるので戸惑ってしまいました。

    • ベストアンサー
    • Java
  • アクセス修飾子

    アクセス修飾子 が理解できません。 ヘルプやインターネットで調べると下記のようにかかれています。 public 『アクセスの制限はありません。 』 protected 『アクセスは、コンテナ クラス、またはコンテナ クラスから派生した型に制限されます。 』 internal 『アクセスは現在のプロジェクトに制限されます。 』 protected internal 『アクセスは、現在のプロジェクト、またはコンテナ クラスから派生した型に制限されます。 』 private 『アクセスはコンテナ型に制限されます。』 public 、private は理解できるのですが、protected 、internal が理解できません。 Javaだとprotectedは同じパッケージ内、サブクラスでアクセス可能とかかれています。 .NETも同じでしょうか? 同じパッケージ内?ってどういうこと?となっています。 1つのオブジェクト内に2つのクラスを作成し、 クラスAのメソッドに protectedで作成し 、クラスBでクラスAの宣言をしたらAのprotectedのメソッドは使用できません。どういう場合にprotectedのメソッドは使用できるのでしょうか?

  • 複数のExcelブックの可視セルを統合VBA

    いつもお世話になっております。 複数のExcelブックの可視セルのみを、別のブックの1つのシートに統合することはできるのでしょうか? やりたいことは、始めに複数人に同一ファイルを配布し、1つのフォルダにそれを纏め、各担当者ごとでフィルタを掛けた部分(可視セル)だけを1つのブックの2シート目(1シート目はAccessにリンクさせています)に纏めたいと思っております。 ファイルは、1行目に集計・2行目に各項目があり、必要データは3行目からです。 VBA初心者の為、どなたかおわかりになる方いらっしゃいますでしょうか? 宜しくお願いいたします。

  • Javaのアクセス修飾子は4つで足りる?

    Javaに、アクセス修飾子ってあるじゃん。デフォルトも含めて4つだけですけど、これで事足りますか?もう1つ加えて5つにすると、使いやすいかなと個人的に思うのですが。 何を追加したいかというと、「同パッケージ内のサブクラスのみアクセス可」です。何か名前をつけるなら familyです。サブクラスは同パッケージに作ることもあれば別パッケージに作ることもあって、2通り考えられるます。そのうち前者を、スーパークラスと血縁関係のある家族のように特別扱いします。家族の絆があればアクセス可としよう、そんな感じです。 現状の4つは (厳しい) 1.private 2.デフォルト 3.protected 4.public (緩い) 追加するfamilyは、1と2の間に位置します。 privateだと自クラスのみ、家族も排除。 デフォルトだと、同パッケージ内ならサブクラス(家族)に加えそれ以外のクラスもアクセス可、別パッケージからはサブクラスでも排除です。 familyに需要あると思うのですが、ドーかしら? 例えば、同パッケージ内にガンダムclassと鉄腕アトムclassとドラえもんclassを作ります。いずれもロボットですから、その共通点を抽出したロボットclassを作っておいて、後からそれをextendsで継承し、差分だけプログラミングします。こういうとき、カプセル化とかbeanの方針でロボットclassのフィールドにはprivateを付けたいところですが、それ付けちゃうと継承するときにsetterもgetterも機能しません。 かといって、privateをデフォルトやprotectedに変えると、緩すぎだと思う。familyがちょうど良いと思う。

  • 親クラスのメソッドを別のパッケージの子クラスでオーバーライドするときについて

    早速ではございますが、質問をさせていただきます。 親クラスのパッケージとは異なるパッケージに子クラスが あるとき、子クラスが親クラスのメソッドをオーバーライ ドするときに、親クラスのメソッドのアクセス修飾子を publicかprotectedにしなければコンパイルエラーになり ます。それはなぜなのでしょうか? どうかご教授のほどよろしくお願いします。

    • ベストアンサー
    • Java
  • protectedについて

    メソッドの前につけるprotectedについてなんですが 具体的にどこまでアクセスを許可するのでしょうか? 調べたところサブクラスと同じクラス内はいけるようですが 同じパッケージ内ではだめなのでしょうか?

    • ベストアンサー
    • Java
  • PCの自作に必要な部品は?

    PCの自作をするつもりです。 しかしド素人なので、どんな部品が必要か良く分かりません。 何が必要なのでしょうか?ケーブルなど細かい部品まで教えて頂ければ幸いです。 もしド素人でも、一人で自作できるように分かりやすく説明されているサイトなどがあればそのアドレスをお教えください。 最近は自作が逆にお金が掛かるのはしっていますが、勉強を兼ねてトライしたいと考えています。 またPC部品同士の相性などが分かるサイトもあれば同時にお教えください。

  • 音楽(バンド)を学習するには何が必要?

    ド素人が音楽(バンド)を学習するには何が必要ですか? 単純に楽譜読めて楽器など弾ければ良いと言うことではないのでしょうか? 8ビートや16ビートなどよくわからないのですが 楽譜を勉強すれば理解できるのでしょうか?

  • eclipseについて

    いつもお世話になっております。 eclipseを使って開発をしているのですが 最近困った現象に襲われています。 (Ver2.???です) javaソース内に複数のメソッド (publicやprivateやprotectedのメソッド) を記述しています。 例えば、とあるpublicのメソッド内で privateのメソッドを呼んでいるとします。 public内のprivateのメソッド名のところで 「F3」もしくは「宣言を開く」を選ぶと 該当する(private)メソッドしかjavaエディタに 表示されなくなってしまいました。 普通であればただ単にそのメソッドに飛んでjavaファイル内の ソース自体はすべて表示されていますよね? (初心者)なので設定をいじりすぎたのが原因かとは思われますが 何を変更したためにこのような現象になったのかわかりません。 開発の効率が落ちて非常に困っております。 どうかみなさまの知識を教えてもらえませんか。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • publicがprotectedになった場合のプログラム修正

    JDK1.4から1.3にバージョンを落とす事になったのですが、java.util.Calendar.getTimeInMillisが publicでなくprotectedでした。 http://java.sun.com/j2se/1.3/ja/docs/ja/api/java/util/Calendar.html#getTimeInMillis() したがって、他のパッケージからのアクセスできなくなってしまったのですが、こういう場合どのように対処すれば良いでしょうか?

    • ベストアンサー
    • Java