求教大神下面的java代码,为什么没有调用wolf类的getDesc方法,却能输出Wolf[name=灰太狼,weight=32.3]?

classAnimal{publicStringgetDesc(){return"animal";}publicStringtoString(){returngetDes... class Animal{
public String getDesc(){
return "animal";
}
public String toString(){
return getDesc();
}
}
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 class test {
public static void main(String args[]){
System.out.println(new wolf("灰太狼",32.3));
}
}
展开
 我来答
notole
2015-06-02 · TA获得超过247个赞
知道小有建树答主
回答量:271
采纳率:45%
帮助的人:104万
展开全部
继承啊。animal里有toString(),调用了getDesc();
不明白的看这源代码。
System.out.println(new wolf("灰太狼",32.3));
看println(Object x)方法
public void println(Object x) {
String s = String.valueOf(x);
synchronized (this) {
print(s);
newLine();
}
}
再看 String.valueOf(x);方法
public static String valueOf(Object obj) {
return (obj == null) ? "null" : obj.toString();
}
看obj.toString();调用了类的toString(),方法。
所有类的祖宗是Object。继承规定,不能缩小父类的方法。所以保证了任何类都有toString()方法。因为Object声明是public的。你即使覆盖,就像animal了覆盖了父类的toString()。但也只能用public声明,private方法不能继承下去。wolf的toString()就是从animal继承下来的。还有一个运行期动态绑定。这也是接口实现的关键。保证了调用的是本类的方法。而不是父类的。
所以你类不重写toString(),将继承Object的toString()方法,
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
就是打印出一串这种玩意的原因。
还有一个注意。如果把父类的getDesc()方法是private的。而wolf的getDesc()是public的,这不是方法覆盖。再输出将会是animal。子类没有覆盖父类的getDesc()。也无法覆盖。也无法调用自己的getDesc()方法。因为这方法可能没有。
dark19861201
2015-06-03 · TA获得超过2153个赞
知道大有可为答主
回答量:2584
采纳率:79%
帮助的人:1801万
展开全部

我尽量说简单些吧,

  1. System.out.println这个方法或调用对象的toString方法()

  2. 但是wolf本身并没有toString方法,所以会调用父类(也就是Animal)的toString方法

  3. 在Animal的toString方法里面又调用了getDesc方法

  4. 由于wolf重写过父类Animal的getDesc方法,所以会调用wolf自己的getDesc方法(多态)

  5. 最终指向的是return "Wolf[name="+name+"weight = "+weight+"]";这行代码,所以打印出来你说的情况

追问
谢谢。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
亓官鸿则
2015-06-02 · TA获得超过166个赞
知道小有建树答主
回答量:274
采纳率:0%
帮助的人:119万
展开全部
你打印的是这个对象
不知道
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式