前提・実現したいこと
java初心者です。
javaの勉強をしています。
只今継承について勉強をしていて、実際に継承してコンストラクタを設定したところ、エラーが起きてしまいました。
main.java
public class main {
public static void main(String[] args){
Matango m = new Matango("おばけきのこ",'A',50,5);
childMatango m1 = new childMatango("おばけちゃん",'B',20,3);
...
}
}
childMatango.java
public class childMatango extends Matango{
public childMatango(String name, char Suffix, int hp, int level){
this.name = name;
this.Suffix = Suffix;
this.hp = hp;
this.level = level;
}
...
}
上記コード(一部抜粋)それだとエラーが発生するため、こちらに変更しました。
main.java
public class main {
public static void main(String[] args){
Matango m = new Matango("おばけきのこ",'A',50,5);
childMatango m1 = new childMatango();
...
}
}
childMatango.java
public class childMatango extends Matango{
public childMatango(){
super(String name, char Suffix, int hp, int level);
}
...
}
これだとコンパイルは成功するのですが、childMatango内で例えばSystem.out.println(this.name)とすると名前が「null」になってしまいました。
どうしてこのような現象が起きてしまっているのでしょうか?
理屈を教えて頂けると嬉しいです。
また、親クラスを継承した子クラス内でコンストラクタを設定する方法も重ねて教えて頂けると嬉しいです。
①super(String name, char Suffix, int hp, int level)にしたらコンパイルエラーが起きない理由
②親クラスを継承した子クラス内でコンストラクタを設定する方法
以上2点をよろしくお願い致します。
発生している問題・エラーメッセージ
.\childMatango.java:8: エラー: クラス Matangoのコンストラクタ Matangoは指定された型に適用できません。 public childMatango(String name, char Suffix, int hp, int level){ ^ 期待値: String,char,int,int 検出値: 引数がありません 理由: 実引数リストと仮引数リストの長さが異なります エラー1個
該当のソースコード
java
main.java public class main { public static void main(String[] args) { Hero h = new Hero("みなと",100,10); Matango m = new Matango("おばけきのこ",'A',50,5); childMatango m1 = new childMatango(); h.run(); m.run(); h.attack(m); m.attack(h); m1.run(); m1.attack(h); } } Hero.java public class Hero { private String name; private int hp; private int level; public Hero(String name, int hp, int level){ this.name = name; this.hp = hp; this.level = level; } public void run(){ System.out.println("勇者は走った"); } public String getName(){ return this.name; } public int getHp(){ return this.hp; } public void setHp(int hp){ this.hp = hp; } public void attack(Matango m){ int damage = new java.util.Random().nextInt(5); int Afterhp = (m.getHp() - damage); System.out.println("勇者は" + m.getName() + m.getSuffix() + "に" + damage + "ポイントのダメージを与えた。"); System.out.println("おばけきのこ" + m.getSuffix() + "のHPは" + Afterhp + "になった。"); m.setHp(Afterhp); } } Matanogo.java public class Matango { private String name; private int hp; private int level; private char Suffix; public Matango(String name, char Suffix, int hp, int level){ this.name = name; this.Suffix = Suffix; this.hp = hp; this.level = level; } public String getName(){ return this.name; } public int getHp(){ return this.hp; } public char getSuffix(){ return this.Suffix; } public void setHp(int hp){ this.hp = hp; } public void run(){ System.out.println("おばけきのこは逃げた"); } public void attack(Hero h){ int damage = new java.util.Random().nextInt(5); int heroAfterhp = (h.getHp() - damage); System.out.println(this.name + "は" + h.getName() + "に" + damage + "ポイントのダメージを与えた"); System.out.println("勇者のHPは" + heroAfterhp + "になった。"); h.setHp(heroAfterhp); } } childMatanogo.java public class childMatango extends Matango { private String name; private int hp; private int level; private char Suffix; public childMatango(){ super("おばけちゃん",'B',20,3); } public void run(){ System.out.println(this.name + "は逃げた"); } public void attack(Hero h){ System.out.println("ユーザー定義数値攻撃"); int damage = new java.util.Scanner(System.in).nextInt(); System.out.println(this.name + "は" + h.getName() + "に" + damage + "を与えた"); int heroAfterhp = (h.getHp() - damage); System.out.println(h.getName() + "のHPは" + heroAfterhp + "になった"); h.setHp(heroAfterhp); } }
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。