ここから本文です

java入門生です。 とある課題で、教えていただきたいことがあります。

アバター

ID非公開さん

2019/9/1715:42:47

java入門生です。
とある課題で、教えていただきたいことがあります。

1*作った生物をあらわすCreatureクラスを継承して、
攻撃的な生命体を表す抽象クラス、Attackerクラスを作成してください。

①生命値と名前を設定できるコンストラクタを持つ。(引数なしコンストラクタと引数ありコンストラクタの二つを持つ)
②他の生命体を攻撃する抽象メソッド、void attack(引数はAttacker型インスタンス)メソッドを持つ。
という内容なのですが、

1*(作った生物を表すCretureクラス)
//クリーチャークラス
class Creature{
private String name; //名前
private int life; //生命値

public Creature() {
name = "スライム";
life = 10;
}
public Creature(String n, int l){
name = n;
life = l;
}
public void setName(String n){ //名前の設定
name = n;
}
public String getName(){ //名前の取り出し
return name;
}
public void setLife(int l){ //生命値の設定
life = l;
}
public int getLife(){ //生命値の取り出し
return life;
}
}

を継承するわけですが。
①と②を制作してみたのですが、こちらであってるのでしょうか?
できれば、半丸投げですが、指摘や添削等をしていただけるとありがたいです。

//攻撃的な生命体を表す抽象クラス
abstract class Attacker extends Creature {
//フィールド
public int attack; //攻撃力

//引数なしコンストラクタ
public Attacker(){
}
//引数ありコンストラクタ
public Attacker(int attack) {
setAttack(attack);
}

public Attacker(String name, int life, int attack) {
super(name, life);
setAttack(attack);
}
//抽象メソッド
public abstract void attack(Attacker enemy);

//attackのセッター、ゲッター
public void setAttack(int attack) {
this.attack = attack;
}
public int getAttack() {
return attack;
}
}

閲覧数:
12
回答数:
1
お礼:
250枚

違反報告

ベストアンサーに選ばれた回答

ii3********さん

2019/9/1718:30:23

問題に書かれていることが足りてないし、書いてない無駄な実装もしている。
問題に記載されていることを"過不足無く"実装することを心がける。

こういった問題をやる場合、いきなりプログラムを書いたらダメ。
コード先行だと、抜けが生じたり、無駄な実装を組み込んだりしてしまう。
先に問題文をコメントで書いて、それに合わせて実装する。


まずAttacker.javaを作ったら、問題文をそのままコメントで書く。
// Creatureクラスを継承して、
// 攻撃的な生命体を表す抽象クラス、Attackerクラスを作成してください。
// ①生命値と名前を設定できるコンストラクタを持つ。 (引数なしコンストラクタと引数ありコンストラクタの二つを持つ)
// ②他の生命体を攻撃する抽象メソッド、void attack(引数はAttacker型インスタンス)メソッドを持つ。

次にプログラミングしやすい様に、コメントの文書や言い回しを変える。
// Creatureクラスを継承、抽象クラス「Attacker」を作成
// コンストラクタを二つ持つ、生命値と名前を設定
// 引数なしコンストラクタ
// 引数ありコンストラクタ
// 抽象メソッド、void attack(引数はAttacker型インスタンス)メソッド

最後にコメントに合わせて実装する。
// Creatureクラスを継承、抽象クラス「Attacker」を作成
abstract class Attacker extends Creature{
// コンストラクタを二つ持つ、生命値と名前を設定
// 引数なしコンストラクタ
public Attacker() {
super();
}
// 引数ありコンストラクタ
public Attacker(String n, int l) {
super(n, l);
}
// 抽象メソッド、void attack(引数はAttacker型インスタンス)メソッド
abstract void attack(Attacker enemy);
}

これで過不足の無い実装となる。
// q13213679678

  • アバター

    質問者

    ID非公開さん

    2019/9/1719:33:31

    ありがとうございます。
    コメントが大事なんですね。
    意識して、コメントを付けて、作業に取り掛かろうと思います。

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

あわせて知りたい

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる