这是否可以在某些条件下调用超级构造函数?我有以下代码
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
构造函数。
答案 0 :(得分:0)
这不好,但它有效(不是你的问题的直接答案,而是你的问题的解决方案)。你必须在之前选择,你初始化哪个构造函数,因此你不需要依赖你的super。请注意,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;
}
}
答案 1 :(得分:0)
在任何情况下,构造函数都会调用超级构造函数。
选择调用它/不要调用它的问题是不好问。
看到:
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");
}
}
没有或使用super(1),在创建LowerClass对象时,您会得到:
高年级
LowerClass
或
UpperClass 1
LowerClass
然后问题是:你想要哪一个超级构造函数,用哪个标准?
然后
1你必须有2个(或更多)超级构造函数,或者只有一个有参数
2你必须将这个标准从子类传递给超类