这个问题是关于java中常见的继承问题,动物作为父类,狼作为子类,灰太狼作为狼的对象
问题代码如下:
class Animal {
private String desc ;
 
public Animal(){
this.desc = getDesc() ;
}
 
public String getDesc(){
return "Animal" ;
}
 
public String toString(){
return desc ;
}
}
public class liu extends Animal {
private String name ;
private double weight ;
public liu(String name , double weight){
this.name = name ;
this.weight = weight ;
System.out.println("1"+name);//测试语句1
}
public String getDesc(){
System.out.println("2"+name);//测试语句2
return "Wolf[name=" + name + ",weight=" + weight + "]" ;
}
 
public static void main(String[] args){
liu k=new liu("灰太狼" , 3);
System.out.println(k);
}
}
让小弟困惑的是程序执行的时候,为什么要先执行语句2,而不是1?麻烦各位了,如果能顺便分享一点经验给小弟关于学习java的类的,小弟感激不尽。因为刚来,没有积分,还望各位见谅。

解决方案 »

  1.   

    买本书看看会更快些,比你慢慢自己琢磨更有效,论坛交互其实效率也不高。情况大概是这样:
      liu k=new liu("灰太狼" , 3); 
    这句话会调用构造函数
      public liu(String name , double weight){
    而根据构造函数规范,会预先调用父类构造函数(递归直到Object类)
      public Animal(){
    父类构造函数先执行了
      this.desc = getDesc();
    但getDesc()这个函数实际上被子类liu所重写了(overwrite)
      public String getDesc(){
      System.out.println("2"+name);//测试语句2
      return "Wolf[name=" + name + ",weight=" + weight + "]" ;
      }
    父类构造函数执行完毕后,才会开始执行子类构造函数的其余代码。
    大致理解么?
      

  2.   

    谢谢。我时大专生在读。其实学校教的进度太慢,总希望自己在有限的大学时间里得到更多的进步,学校的教材上资源比较有限,然后我借了《java编程方法论》,无奈小弟功力尚浅,不是很看得懂。
      

  3.   

    学的OOP那块吧,比较抽象需要多做练习 可以加我QQ1543150073有时可以在线帮助你
      

  4.   

    找本java基础介绍的书,这些东西里面都应该会有比较详细的讲解的
      

  5.   

    创建子类的对象,new Child() ;会先调用父类的构造方法