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