継承
Java練習問題 第13回では「継承」についての問題を用意してあります。
「継承」の解説はこちら
問題 1 難易度 ★★★
以下の手順に従ってプログラムを作成してください。
① 既存の Slime クラスを継承した、FireSlime クラスを定義してください。
② FireSlime は火を吹くことができる特別なスライムなので、fire メソッドを定義します。fireメソッドは、実行されると「〇〇(name)は火を吹いた!」と表示します。
③ メインメソッド内で FireSlime のインスタンスを(”すら太郎”,100)として生成し、attack(),fire(),run() の 3 つのメソッドを呼び出してください。
public class Main_0901 {
public static void main(String[] args) {
}
}
class Slime {
private String name;
private int hp;
public Slime(String name, int hp) {
this.name = name;
this.hp = hp;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void run() {
System.out.println(name + "は逃げ出した");
}
public void attack() {
System.out.println(name + "の攻撃!");
}
}
実行例
すら太郎の攻撃!
すら太郎は火を吹いた!
すら太郎は逃げ出した
問題 1 解答
正解は、、、
public class Main_0901 {
public static void main(String[] args) {
FireSlime fireSlime = new FireSlime("すら太郎", 100);
fireSlime.attack();
fireSlime.fire();
fireSlime.run();
}
}
class Slime {
private String name;
private int hp;
public Slime(String name, int hp) {
this.name = name;
this.hp = hp;
}
public int getHp() {
return hp;
}
public void setHp(int hp) {
this.hp = hp;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void run() {
System.out.println(name + "は逃げ出した");
}
public void attack() {
System.out.println(name + "の攻撃!");
}
}
class FireSlime extends Slime {
public FireSlime(String name, int hp) {
super(name, hp);
}
public void fire() {
System.out.println(getName() + "は火を吹いた!");
}
}
問題 2 難易度 ★★★
以下の手順に従ってプログラムを作成してください。
STEP 1
① 既存の Bicycle(自転車)クラスを継承した ElectricAssistBicycle(電動アシスト自転車)クラスを定義してください。
② ElectricAssistBicycle の name は「電動アシスト自転車」としてください。
③ ElectricAssistBicycle はモーターの力で、ペダルに伝えた力の 2 倍の速度を出すことができるように定義してください。
STEP 2
① メインメソッド内で ElectricAssistBicycle のインスタンスを生成して下さい。
② ElectricAssistBicycle インスタンスの、pedal メソッドを引数 10.0 で呼び出してください。
③ ElectricAssistBicycle インスタンスの、showStatus メソッドを呼び出してください。
④ ElectricAssistBicycle インスタンスの、braking メソッドを呼び出してください。
⑤ ElectricAssistBicycle インスタンスの、showStatus メソッドを呼び出してください。
public class Main_0902 {
public static void main(String[] args) {
Bicycle bicycle = new Bicycle();
bicycle.pedal(10.0);
bicycle.showStatus();
bicycle.braking();
bicycle.showStatus();
}
}
//自転車クラス
class Bicycle {
private String name;
private double speed;
public Bicycle() {
setName("自転車");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private void setSpeed(double speed) {
this.speed = speed;
}
public double getSpeed() {
return speed;
}
public void pedal(double power) {
setSpeed(power * 1.0);
}
public void braking() {
setSpeed(0.0);
}
public void showStatus() {
System.out.println(getName() + "は、時速" + getSpeed() + "km で走行中です。");
}
}
実行例
自転車は、時速 10.0km で走行中です。
自転車は、時速 0.0km で走行中です。
電動アシスト自転車は、時速 20.0km で走行中です。
電動アシスト自転車は、時速 0.0km で走行中です。
問題 2 解答
正解は、、、
public class Main_0902 {
public static void main(String[] args) {
Bicycle bicycle = new Bicycle();
bicycle.pedal(10.0);
bicycle.showStatus();
bicycle.braking();
bicycle.showStatus();
ElectricAssistBicycle assistBicycle = new ElectricAssistBicycle();
assistBicycle.pedal(10.0);
assistBicycle.showStatus();
assistBicycle.braking();
assistBicycle.showStatus();
}
}
//自転車クラス
class Bicycle {
private String name;
private double speed;
public Bicycle() {
setName("自転車");
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
private void setSpeed(double speed) {
this.speed = speed;
}
public double getSpeed() {
return speed;
}
public void pedal(double power) {
setSpeed(power * 1.0);
}
public void braking() {
setSpeed(0.0);
}
public void showStatus() {
System.out.println(getName() + "は、時速" + getSpeed() + "km で走行中です。");
}
}
//電動アシスト自転車
class ElectricAssistBicycle extends Bicycle {
public ElectricAssistBicycle() {
setName("電動アシスト自転車");
}
@Override
public void pedal(double power) {
super.pedal(power * 2.0);
}
}
Java練習問題 第14回では「抽象クラス、抽象メソッド」から出題します。
コメント