这是一个加包后的class反编译出来的代码:
//父类
public abstract class fathr {
private final String kind;
public fathr(String k) {
this.kind = k;
}
}//子类
public class son extends fathr{
        int a,b; public son() {
super("test");
}

public son(int a,int b)
{
this.a = a;
this.b = b;
}
}在son(int a,int b)的构造语句中没有super()语句,我自己编程试了下,这些代码会直接报错,必须在son(int a,int b)的第一行加上super()才行,请问:
1.这是不是因为反编译软件的问题,隐藏了son(int a,int b)构造方法的super语句?还是其他什么情况?
2.我调用son(int a,int b)方法的话,son.kind能被赋值为“test”吗?反编译软件叫“Java Decompiler”

解决方案 »

  1.   


      public son(int a,int b)
      {
          this.a = a;
          this.b = b;        
      }这个方法的第一句是被隐藏的 super(); 即调用父类构造函数。而你的父类fathr中没有定义无参构造函数,所以你必须在son方法的第一句加上super("test");去调用父类构造函数。
      

  2.   


    这个我知道,我是要问,为什么反编译软件里面没有super("test"),是不是反编译软件隐藏了这个语句刚才试了下这个包,直接调用son(int,int)方法后,new出的son类里kind=“test”,说明包里的子类是没问题的,难道反编译真的会隐藏super字段么
      

  3.   

    反编译不一定100%恢复原样
    public son() {
        super("test");
    }public son(int a,int b)
    {
        this(); //这样也是可以的,所以和super,this应该没关系,看反编译具体如何实现
        this.a = a;
        this.b = b;        
    }