練習問題

3.5 練習問題

本章で習った内容を元に練習問題を解いてください。

問1 次の設問①~⑤について○か×で答えなさい。

設問
① アクセス制限のパターンは「public」、「デフォルト」、「private」の3つがある。
② private修飾子は外部からのアクセスを不可能にする。
③ アクセス修飾子はクラス内のメンバのみにしか設定できない。
④ カプセル化とはフィールド変数をprivateに設定しアクセス不可能にしただけのクラスのことをさす。
⑤ アクセサメソッドとは値を設定するセッターメソッドと、値を取得するゲッターメソッドの総称である。

問2 以下に示すアクセス修飾子を制限の「強い順」に番号をつけて答えなさい。

アクセス修飾子
① protected
② デフォルト
③ private
④ public

問3 以下のカプセル化したソースコードの誤り3つ答えなさい。

ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch03exercise
③ 名前: Dog

1package jp.co.f1.basic.ch03exercise;
2 
3public class Dog {
4  String name;
5 
6  public String getname() {
7    return this.name;
8  }
9 
10  void setName(String name) {
11    this.name = name;
12  }
13}

問4 以下に示すBooks1クラスをカプセル化しなさい。

ヒント
  • フィールド変数のprivate定義
  • 各フィールド変数に対応するアクセサメソッドの定義
ソースコード

① ソース・フォルダー: myproj_basic/src
② パッケージ: jp.co.f1.basic.ch03exercise
③ 名前: Books1

1package jp.co.f1.basic.ch03exercise;
2 
3public class Books1 {
4  String title;
5 
6  int price;
7 
8  void show() {
9    System.out.println("この本のタイトルは" + this.title + "で、値段は" + this.price+ "です。");
10  }
11}

問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) にチェックを入れる

1package jp.co.f1.basic.ch03exercise;
2 
3class Books3 {
4  private String title;
5 
6  private int price;
7 
8  public void show() {
9    System.out.println("この本のタイトルは" + this.title + "で、値段は" + this.price + "です。");
10  }
11 
12  public String getTitle() {
13    return this.title;
14  }
15 
16  public int getPrice() {
17    return this.price;
18  }
19 
20  public void setTitle(String title) {
21    this.title = title;
22  }
23 
24  public void setPrice(int price) {
25    if (price < 0) {
26      this.price = 0;
27      System.out.println("設定する値が" + price + "のため、価格は0を設定しました。");
28    } else {
29      this.price = price;
30    }
31  }
32}
33 
34public class Practice0301 {
35  public static void main(String[] args) {
36    // Books3オブジェクト2つ生成
37    ①の処理仕様をここに記述
38 
39    // book1オブジェクトの値を設定と結果を表示
40    ②と③の処理仕様をここに記述
41 
42    // book2オブジェクトの値を設定(価格は不正な値と結果を表示
43    ④と⑤の処理仕様をここに記述
44 
45  }
46}

NEXT>> 3.6 練習問題 解答

f