日期:2014-05-20  浏览次数:20763 次

反编译会隐藏子类构造函数里面的super()语句吗?
这是一个加包后的class反编译出来的代码:

Java code

//父类
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”

------解决方案--------------------
反编译不一定100%恢复原样
Java code
public son() {
    super("test");
}

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