有谁知道为什么可以在构造函数的第一行使用 this()
或 super()
引用 static
方法,但不是非静态方法?
考虑以下工作:
public class TestWorking{
private A a = null;
public TestWorking(A aParam){
this.a = aParam;
}
public TestWorking(B bParam)
{
this(TestWorking.getAFromB(bParam));
}
//It works because its marked static.
private static A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
还有以下非工作示例:
public class TestNotWorking{
private A a = null;
public TestNotWorking(A aParam){
this.a = aParam;
}
public TestNotWorking(B bParam)
{
this(this.getAFromB(bParam));
}
//This does not work. WHY???
private A getAFromB(B param){
A a = new A();
a.setName(param.getName());
return a;
}
}
最佳答案
非静态方法是实例方法。这只能在现有实例中访问,并且当您在构造函数中时实例还不存在(它仍在构建中)。
为什么会这样?因为实例方法可以访问实例(非静态)字段,这些字段在不同实例中可能具有不同的值,因此在现有的已完成实例之外的其他对象上调用此类方法没有意义。
关于java - 为什么在显式调用构造函数时不能引用实例方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685506/