帮忙分析一下这个程序的结果
public class Wolf extends Animal{
private String name;
private double weight;
public Wolf(String name, double weight) {
this.name = name;
this.weight = weight;
}
public String getDesc() {
return "Wolf[name="+name+",weight="+weight+"]";
}
public static void main(String[] args) {
Wolf wolf=new Wolf("灰太狼", 34);
System.out.println(wolf.name);//灰太狼
System.out.println(wolf);//null
}
}
class Animal{
private String desc;
public String getDesc(){
return "This is Animal";
}
public String toString(){
return desc;
}
}
第一个地方不用说了。为什么已经打印出了“灰太狼”,还会打印出null?请赐教!
继承,面向对象
------解决方案--------------------打印对像的引用,就是相当于打印对像的toString方法。Wolf继承Animal,会调用Animal的toString方法,你父类toString方法返回值desc没有初始化,所有为null
------解决方案--------------------System.out.println(wolf);//null
==调用System.out.println(wolf.toString());//
而你的
public String toString(){
return desc;
}
desc没有初始化,当然null
------解决方案--------------------
+1 正确。子类中没有重写toString,所以会调用Animal中的toString。所以返回的是Animal中的desc,所以是null。