A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
例としてWebブラウザのようなものを考えてみましょう。
・クラスA:設定ファイルを読み書きするクラス。
ファイルハンドラを保持し、ファイルオープン処理、設定取得処理、設定変更処理、ファイルクローズ処理(ファイル保存処理)を定義する。
・クラスB:キャッシュを読み書きするクラス。
ファイルハンドラを保持し、ファイルオープン処理、キャッシュ取得処理、キャッシュ追加処理、ファイルクローズ処理(ファイル保存処理)を定義する。
この時ファイルハンドラをpublicにしているとします。
そして間違えてクラスAのファイルハンドラでクラスBのファイルハンドラを上書きしたらどうなるでしょうか?
キャッシュを読み書きするはずのクラスが設定ファイルを編集してしまうことになります。それは即設定ファイル破損につながります。
もしこの時ファイルハンドラをprivateにしていたらどうでしょうか?
そして間違えてクラスAのファイルハンドラでクラスBのファイルハンドラを上書きすること自体が不可能になります。
さらにこのクラスを使っているアプリケーションがPlug-inをサポートしているとしましょう。
この時ファイルハンドラをpublicにしていると、悪意のあるPlug-inから設定ファイルを破壊できることになります。
ファイルハンドラをprivateにしていれば、悪意のあるPlug-inが設定ファイルを破壊しようとしてもファイルハンドラを書き換えられないことになります。
こうした理由から見える必要がないものは見せないほうがアプリケーション全体の安定性や、セキュリティを確保できることになります。
ですから、やりすぎは良くないけれど外部から特別見せる必要がないものはprivateの方がよいといわれるわけです。
No.2
- 回答日時:
クラス内部からしか使われないフィールドやメソッドについては、
スコープを最小限に留めるために private は当然です。
https://ja.wikipedia.org/wiki/%E3%82%B9%E3%82%B3 …
クラス外部から使用される場合ですが、メソッドについては単純に public にします。
ですがフィールドについては、
private のままにして専用の public メソッドにて読み書きすることが多いです。
その理由ですが、Java の仕様に Beans というのがあり、
これに即した書き方が教科書でも推奨されて一般的に広まったからだと思います。
https://ja.wikipedia.org/wiki/JavaBeans
Beans 形式にする意味ですが、
* オブジェクト指向の「カプセル化」を実現でき、クラスの安全性が高まる
* 値を参照・更新するだけで、処理が発生するケースに対応できる
* Java 用のライブラリが、Beans 形式を要求することが多い
* 特に RAD ツールで使われる場合は必須だった
ただし、言語的に必須とされているわけではないので、
特に理由が無ければフィールドを public 指定してもなんら問題ないでしょう。
クラス設計はシンプルであればあるほど良いという考え方もありますので。
https://ja.wikipedia.org/wiki/Plain_Old_Java_Obj …
No.1
- 回答日時:
単純に、外に見せる必要の無いものは隠す ということです。
だからフィールドはprivateは絶対じゃ有りません。でも
そうしておいた方が無難です。
「カプセル化」を学びましょう。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- Java java 飾子を付けること(public static・・・) ・コンソールへの出力処理はmainメ 2 2022/06/16 19:34
- 会社・職場 一人のメンバだけに土日出勤がある面倒な作業を丸投げ、一方で、上司とそれ以外の同僚達はそのメンバだけハ 4 2023/07/21 10:31
- C言語・C++・C# C言語 2 2022/07/21 00:02
- Java JavaのSingletonパターンのprivateの持つ意味が分かりません。 5 2022/06/12 10:38
- JavaScript オブジェクト配列の各メンバを任意の式で評価して、その評価値が最大のオブジェクトを返す関数はありますか 2 2023/05/20 15:02
- Java java 次の機能を有するメソッドを自クラスに作成し、実装したいです。 機能 名前判定機能 →名前が 3 2022/06/16 16:08
- Java java final 1 2022/06/10 22:49
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaの質問です 次の機能を有するメソッド4つを自クラスに作成し、実装したいです 【機能】 足し算 1 2022/06/15 17:49
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Eclipse・プロジェクトで、フォ...
-
SVFの設定について:クラスパス...
-
Eclipse「リフレッシュ」と「ク...
-
eclipse でclassesフォルダーが...
-
classファイルについて
-
javaクラスファイルをEclipseで...
-
earファイルを展開する方法
-
jdbcドライバのjarファイルにク...
-
「削除するか、クラスパスの正...
-
「メイン・マニフェスト属性が...
-
コンパイルをしようとするとエ...
-
EclipseでHTTP404エラーが出る。
-
【Eclipse】パッケージ・エクス...
-
プログラム実行の際に、「ソー...
-
EclipseでのJDBCドライバについて
-
java.io.Fileクラスは絶対パス...
-
<Tomcat>存在しないJSPをイン...
-
ディレクトリを操作したいと思...
-
vbs で jar ファイルを起動させ...
-
org.apache.tools.zip.* を使っ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
classファイルについて
-
Eclipse・プロジェクトで、フォ...
-
javaクラスファイルをEclipseで...
-
Eclipse「リフレッシュ」と「ク...
-
SVFの設定について:クラスパス...
-
earファイルを展開する方法
-
【Eclipse】パッケージ・エクス...
-
eclipse でclassesフォルダーが...
-
「メイン・マニフェスト属性が...
-
java クラスファイルとソースコ...
-
「削除するか、クラスパスの正...
-
プログラム実行の際に、「ソー...
-
EclipseでHTTP404エラーが出る。
-
VisualStudioでC++クラスを追加...
-
コンパイルをしようとするとエ...
-
『ClassNotFoundException: org...
-
Java初心者です。 コマンドプロ...
-
jdbcドライバのjarファイルにク...
-
【Eclipse】逆コンパイルでエラ...
-
Tomcatの「\\WEB-INF\\classes...
おすすめ情報