gpt4 book ai didi

java - 使用继承时出现 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 07:04:36 24 4
gpt4 key购买 nike

我有一个场景,可以通过以下玩具示例来最好地说明。假设我有四个类:

public class Animal {
public Animal(String a_name){
this.name = a_name;
}
public String name;
}

public class Mammal extends Animal{
public Mammal(String a_name, String a_nickname) {
super(a_name);
this.nick_name = a_nickname;
}
String nick_name;
}


public class Animal_Groomer{
public Animal_Groomer(Animal an_animal){
this.the_animal = an_animal;
}
public void print_name() {
System.out.println(the_animal.name);
}
public Animal the_animal;
}

public class Mammal_Groomer extends Animal_Groomer{
public Mammal_Groomer(Mammal a_mammal){
super(a_mammal);
}
public void print_nickname(){
System.out.println(the_animal.nick_name);
}
public Mammal the_animal;
}

现在如果我的主要例程是

Mammal a_mammal = new Mammal("Tiger", "Bob");
Mammal_Groomer MG = new Mammal_Groomer(a_mammal);
MG.print_name();
MG.print_nickname();

MG.print_name() 输出“Tiger”,但 MG.print_nickname() 给我一个 java.lang.NullPointerException 异常。有没有办法修复构造函数或 MG.print_nickname() 方法来打印 nick_name?谢谢。

最佳答案

在继承中,方法会被覆盖,而字段和静态成员会被隐藏/隐藏。

因此,如果您在父级中初始化一个字段,那么如果您在子级中定义相同的字段,则不会对子级产生任何影响,因为它将被隐藏。

您没有初始化隐藏您的父字段且值为 null 的子字段。您需要在子构造函数中单独初始化子类的成员。

public Mammal_Groomer(Mammal a_mammal){
super(a_mammal);
this.the_animal = a_mammal;
}

了解有关遮蔽/隐藏和覆盖的更多信息:Overriding vs Hiding Java - Confused

关于java - 使用继承时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29091822/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com