【发布时间】:2015-05-19 10:51:40
【问题描述】:
我有一个场景,可以通过以下玩具示例进行最佳说明。假设我有四个类:
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() 方法来打印昵称?谢谢。
【问题讨论】:
-
继承就像辣椒味的啤酒。理论上听起来不错,但通常会导致比您预期的更多的问题。替代方案:组合。接口(实际上是完全抽象的基类)
标签: java inheritance