私は、継承の概念に基づいたプロジェクトを行い、2つの変数(String、int)を持つスーパーコンストラクタを作成しました。このスーパーコンストラクタは、スーパーコンストラクタクラスを継承したサブコンストラクタ内で呼び出されます。次に、2つのメソッドを使用して、コンストラクタ内でそれらの変数のプロパティを返します。 ageプロパティは正常に出力されていますが、Stringプロパティはnullを返しています。ここでは、コードです:コンストラクタ内の変数がnullを返していますか?
動物のスーパークラス
abstract public class Animal
{
int age;
String name;
Animal(String name, int age)
{
this.age = age;
this.name = name;
}
Animal()
{
this("newborn", 0);
}
public String getName() {
return name;
}
public void setName(String newName) {
name = newName;
}
}
ウルフサブクラス
public class Wolf extends Carnivore
{
String name;
int age;
Wolf(String name, int age)
{
this.name = name;
this.age = age;
}
Wolf()
{
super();
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
Mainメソッドクラス
public class Main {
public static void main(String[] args)
{
Wolf newWolf = new Wolf();
System.out.println("Name = " + newWolf.getName());
System.out.println("Age = " + newWolf.getAge());
}
}
年齢は0に戻りますが、正しいですが、System.out.println("Name = " + newWolf.getName());
は「新生児」の代わりにnullを返すようです。この問題を解決するための助けに感謝します。
更新は - 私はそれらの両方が存在して持つ方法がある私は、この例には含まれていない別のコンストラクタのgetName()
方法がありますか?
Wolf' 'から'のgetName() 'メソッドを削除します。'ウルフの値を返すこと'Wolf.name'も削除します(' Wolf'の 'getAge()'と 'age'も同じです) –
あなたはだまされています、' age'は0を返していませんあなたはそれが復帰していると思います。 t'int'値は0になります。これは 'Animal'のコンストラクタで指定した値ではありません。 – Tunaki
問題は、getName()メソッドを必要とする別のコンストラクタがあることです。 – Tom