練習問題

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オブジェクトの値を設定(価格は不正な値と結果を表示
      ④と⑤の処理仕様をここに記述

    }
  }
  

NEXT>> 3.6 練習問題 解答