練習問題 解答

6.5 練習問題 解答

問1

① ○
② ○
③ ×:クラスメンバはオブジェクト共通の情報なのでアクセスは可能です。
④ ×:クラスメンバはクラス自身に関連付けられるため、オブジェクトには関連付けられない。
⑤ ×:クラスメンバはクラスに実体として定義される。

問2

① クラスメソッドからインスタンス変数にアクセスしている。
② クラス変数に「this」キーワードをつけている。
③ 引数なしのコンストラクタが定義されていないのに、オブジェクト生成時に引数を与えていない。
④ 「オブジェクト名.クラスメソッド名」でクラスメソッドにアクセスしている。
※コンパイルエラーにはなりませんが、クラスメソッドにアクセスする場合は「クラス名.クラスメソッド名」と記述するのが一般的です。

問3

Book1.java
  package jp.co.f1.basic.ch06exercise;

  public class Book1 {
    private static int count = 0; // オブジェクト生成回数
    private String title; // 書籍名
    private int price; // 書籍価格
    private int number; // 生成番号

    // コンストラクタ
    public Book1(String title, int price) {
      ++count; // オブジェクト生成毎にカウントアップ
      this.title = title;
      this.price = price;
      this.number = count; // 現在の生成回数を番号に格納
    }
  }
  

問4

Book2.java
  package jp.co.f1.basic.ch06exercise;

  public class Book2 {
    private static int count = 0; // オブジェクト生成回数
    private String title; // 書籍名
    private int price; // 書籍価格
    private int number; // 生成番号

    // コンストラクタ
    public Book2(String title, int price) {
      ++count; // オブジェクト生成毎にカウントアップ
      this.title = title;
      this.price = price;
      this.number = count; // 現在の生成回数を番号に格納
    }

    // 書籍情報表示メソッド
    public void showBook() {
      System.out.println("この本のタイトルは" + this.title + "、価格は" + this.price
        + "です。");
      System.out.println("生成番号は" + this.number + "です。");
    }

    // オブジェクト生成回数取得メソッド
    public static int getCount() {
      return count;
    }
  }
  

問5

Practice0602.java
  package jp.co.f1.basic.ch06exercise;

  import java.util.Scanner;

  class Book3 {
    private static int count = 0; // オブジェクト生成回数
    private String title; // 書籍名
    private int price; // 書籍価格
    private int number; // 生成番号

    // コンストラクタ
    public Book3(String title, int price) {
      ++count; // オブジェクト生成毎にカウントアップ
      this.title = title;
      this.price = price;
      this.number = count; // 現在の生成回数を番号に格納
    }

    // 書籍情報表示メソッド
    public void showBook() {
      System.out.println("この本のタイトルは" + this.title + "、価格は" + this.price
        + "です。");
      System.out.println("生成番号は" + this.number + "です。");
    }

    // オブジェクト生成回数取得メソッド
    public static int getCount() {
      return count;
    }
  }

  public class Practice0602 {
    public static void main(String[] args) {
      // ①スキャナークラスをオブジェクト化
      Scanner sin = new Scanner(System.in);

      // ②3回ループ処理
      for (int i = 0; i < 3; i++) {
        // ③タイトルを入力
        System.out.print("本のタイトルを入力してください->");
        String title = sin.next();

        // ④価格を入力
        System.out.print("本の価格を入力してください->");
        int price = sin.nextInt();

        // ⑤キーボード入力から値を引数にオブジェクト生成
        Book3 book = new Book3(title, price);

        // ⑥書籍情報を表示
        book.showBook();

        // 改行する
        System.out.println();
      }

      // ⑦オブジェクト生成回数を表示
      System.out.println("■本の生成回数は「" + Book3.getCount() + "」回です。");
    }
  }
  

解説
① new演算子を用いてScannerクラスをオブジェクト化します。

  Scanner sin = new Scanner(System.in);
  

② for文を用いて3回ループさせます。

  for(int i=0;i<3;i++)
  

③ Scannerクラスnextメソッドを利用して文字列を入力し、変数titleに格納します。

  String title = sin.next();
  

④ ScannerクラスnextIntメソッドを利用して整数を入力し、変数priceに格納します。

  int price = sin.nextInt();
  

⑤ ③と④の値を引数にBook3オブジェクトを生成します。

  Book3 book = new Book3(title, price);
  

⑥Book3オブジェクトのshowBookメソッドを呼び出し、書籍情報を画面に出力します。

  book.showBook();
  

⑦Book3のクラスメソッドであるgetCountメソッドを呼び出し、オブジェクト総生成回数を画面に出力します。

  System.out.println("■本の生成回数は「" + Book3.getCount() + "」回です。");
  

NEXT>> 7 パッケージとインポート