本日は、オブジェクト指向のJavaでは避けては通れないクラスの継承に関する問題です。わかるかな?
問題 - 継承「難易度:高」
Fruitクラスは、String型のメンバ変数categoryとメンバ変数categoryの中身を出力するメソッドshowCategoryを定義したクラスです。メンバ変数categoryには初期値として「くだもの」をセットしています。
class Fuite {
String category = "くだもの";
public void showCategory() {
System.out.println(category);
}
}
AppleクラスはFruitクラスを継承したクラスとして次のように定義しました。
class Apple extends Fruit {
String category = "りんご";
}
次のようにAppleクラスからオブジェクトを生成し、showCategoryメソッドを呼び出すと何と出力されるでしょうか?
Apple apple = new Apple();
apple.showCategory();
本日は、オブジェクト指向のJavaでは避けては通れないクラスの継承に関する問題です。わかるかな?
問題 - 継承「難易度:高」
Fruitクラスは、String型のメンバ変数categoryとメンバ変数categoryの中身を出力するメソッドshowCategoryを定義したクラスです。メンバ変数categoryには初期値として「くだもの」をセットしています。
class Fuite {
String category = "くだもの";
public void showCategory() {
System.out.println(category);
}
}
AppleクラスはFruitクラスを継承したクラスとして次のように定義しました。
class Apple extends Fruit {
String category = "りんご";
}
次のようにAppleクラスからオブジェクトを生成し、showCategoryメソッドを呼び出すと何と出力されるでしょうか?
Apple apple = new Apple();
apple.showCategory();
解答
「くだもの」と出力される。
解説
FruitクラスのshowCategoryメソッドは、メンバ変数categoryを出力するメソッドです。Fruitクラスではメンバ変数categoryの初期値に「くだもの」をセットしているので、Fruitクラスから生成したオブジェクトからshowCategoryメソッドを呼び出すと、「くだもの」と出力されます。 今回は、Fruitクラスを継承したAppleクラスの定義でメンバ変数categoryに「りんご」とセットしているので、Appleクラスから生成したオブジェクトからshowCategoryメソッドを呼び出すと、「りんご」と出力されそうです。しかし、出力されるのは「くだもの」です。 実は、Appleクラスで定義したメンバ変数categoryは、Fruitクラスのメンバ変数categoryと名前は同じですが、継承されるメンバ変数categoryではなく、まったく別の新しい変数なのです。showCategoryメソッドは、Fruitクラスから継承されたメンバ変数categoryの値を出力するメソッドであり、Appleクラスで定義している別のメンバ変数categoryの値を出力するメソッドではないので、継承されたメンバ変数の値「くだもの」を出力します。
クラスの継承って、ややこしいですね。がんばって!