練習問題
3.5 練習問題
本章で習った内容を元に練習問題を解いてください。
問1 次の設問①~⑤について○か×で答えなさい。
設問
① アクセス制限のパターンは「public」、「デフォルト」、「private」の3つがある。
② private修飾子は外部からのアクセスを不可能にする。
③ アクセス修飾子はクラス内のメンバのみにしか設定できない。
④ カプセル化とはフィールド変数をprivateに設定しアクセス不可能にしただけのクラスのことをさす。
⑤ アクセサメソッドとは値を設定するセッターメソッドと、値を取得するゲッターメソッドの総称である。
問2 以下に示すアクセス修飾子を制限の「強い順」に番号をつけて答えなさい。
アクセス修飾子
① protected
② デフォルト
③ private
④ public
問3 以下のカプセル化したソースコードの誤り3つ答えなさい。
ソースコード① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch03exercise
③ 名前: Dog
package jp.co.f1.basic.ch03exercise; public class Dog { String name; public String getname() { return this.name; } void setName(String name) { this.name = name; } }
問4 以下に示すBooks1クラスをカプセル化しなさい。
ヒント- フィールド変数のprivate定義
- 各フィールド変数に対応するアクセサメソッドの定義
① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch03exercise
③ 名前: Books1
package jp.co.f1.basic.ch03exercise; public class Books1 { String title; int price; void show() { System.out.println("この本のタイトルは" + this.title + "で、値段は" + this.price+ "です。"); } }
問5 問4でカプセル化したクラスBooks1.javaで、不正な値を防ぐ処理を追加したBooks2.javaを作成しなさい。
変更仕様
価格について負の値が入力された場合は「0」を設定する処理をpriceのセッターメソッドに追加する。
不正な値の場合は以下のメッセージを画面に出力する。
「設定する値が-Xのため、価格は0を設定しました。」
※「-X」は引数の値を出力するためその都度変わります。
問6 以下の実行結果になるようなPractice0301.javaのmainメソッドの処理を作成しなさい。Practice0301.java内には問題3-5で作成したBooks2クラスをコピーしてBooks3クラスを定義する。
実行結果
mainメソッドの処理仕様
①Books3オブジェクトを2つ生成する。
②1つ目のオブジェクトにタイトル「Java入門テキスト」、価格「2580」を設定する。
③②の結果を画面に表示するshowメソッドを呼び出す。
④2つ目のオブジェクトにタイトル「Java基礎テキスト」、価格「-3800」を設定する。
⑤④の結果を画面に表示するshowメソッドを呼び出す。
※②④の値の設定には各セッターメソッドを利用する。
① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch03exercise
③ 名前: Practice0301
④ 作成するメソッド・スタブの選択:public static void main(String[] args) にチェックを入れる
package jp.co.f1.basic.ch03exercise; class Books3 { private String title; private int price; public void show() { System.out.println("この本のタイトルは" + this.title + "で、値段は" + this.price + "です。"); } public String getTitle() { return this.title; } public int getPrice() { return this.price; } public void setTitle(String title) { this.title = title; } public void setPrice(int price) { if (price < 0) { this.price = 0; System.out.println("設定する値が" + price + "のため、価格は0を設定しました。"); } else { this.price = price; } } } public class Practice0301 { public static void main(String[] args) { // Books3オブジェクト2つ生成 ①の処理仕様をここに記述 // book1オブジェクトの値を設定と結果を表示 ②と③の処理仕様をここに記述 // book2オブジェクトの値を設定(価格は不正な値と結果を表示 ④と⑤の処理仕様をここに記述 } }