如何在某些情况下调用超级构造函数?
问题描述:
这可能在某些情况下调用超级构造函数吗?我有下面的代码如何在某些情况下调用超级构造函数?
private static final class AuditDataTable extends AuditDataModel<DiscrepanciesVO> {
private AuditDataTable(){
super();
}
}
但我想打电话给super()
当一些Boolean
类变量是true
我。如何才能做到这一点?
现在上面super()
会调用这个
public AuditDataModel() {
super();
AuditResulstBean.setAuditResultRowCount(0);
AuditResulstBean.setAuditResultRowCheck(false);
}
但我想顶层类super()
构造函数时某些条件false
不叫。
答
这不好,但它的工作原理(不是直接回答你的问题,而是解决你的问题)。你必须选择之前,你初始化的构造函数,因此你不需要依赖你的超级。请注意,doSuper从未被使用过,并且决定点会被逆转。作为请求几乎全部工作示例:
private static final class AuditDataTable extends AuditDataModel<DiscrepanciesVO> {
private AuditDataTable(boolean doSuper){
super();
}
private AuditDataTable(){
//other constructor
}
AuditDataTable getAuditDataTable(boolean useSuper){
AuditDataTable auditDataTable;
if(useSuper)
auditDataTable = new AuditDataTable(true);
else
auditDataTable = new AuditDataTable();
return auditDataTable;
}
}
答
在任何情况下,构造函数调用超级构造函数。
选择叫它/不叫它的问题是坏的问。
看出:
public class UpperClass {
public UpperClass()
{
System.out.println("UpperClass");
}
public UpperClass(int a)
{
System.out.println("UpperClass 1");
}
}
而且
public class LowerClass extends UpperClass {
public LowerClass()
{
super(1);
System.out.println("LowerClass");
}
}
没有或超(1),创建LowerClass对象时,你会得到:
高年级
LowerClass
或
高年级1个
LowerClass
接下来的问题是:哪一个超级构造你想要的,与标准是什么?
然后
1必须具有2(或更多)超构造函数,或只有一个带有参数
2你必须从子类此标准传递到超
没有。无论你是否自己添加超级调用,它都必须是构造函数的第一件事。 – Stultuske
'super()'调用总是必须是构造函数中的第一个调用。你无法避免它。 – LordAnomander
虽然你可以调用'super(boolean)'(并且在你的超类中创建相应的构造函数),并且如果它是'true' /'false'就做任何你想做的事情。 – LordAnomander