我有四个类对象,两个处理程序类,一个基本表单类和一个派生表单类。
处理程序类包含Start方法:
public void Start(int BodyFontSize)
{
pForm = new TT_FORM(pParent
,false
,BodyFontSize
);
ShowForm();
}
这会调用基本表单构造函数:
public TT_FORM(clsHCI Parent
,boolean Blocking
,int FontSize
)
{
super(new javax.swing.JFrame()
,Blocking
);
System.out.println("TT_FORM constructor");
m_pParent = Parent;
createFormItems();
sizeForm(FontSize);
...
...
}
定义了createFormItems和sizeForm方法,并打印了一个entry语句。
调用处理程序Start方法会产生预期的输出:
TT_FORM构造函数
TT_FORM createFormItems
TT_FORM sizeForm
我现在用方法介绍第二个处理程序类:
public void Start(int BodyFontSize)
{
pForm = new TT_START(pParent
,BodyFontSize
);
ShowForm();
}
这将调用派生形式的构造函数:
public class TT_START extends TT_FORM
implements ActionListener
{
private static final long serialVersionUID = 1L;
private clsHCI m_pParent;
public TT_START(clsHCI Parent
,int FontSize
)
{
super(Parent, true, FontSize);
System.out.println("TT_START constructor");
m_pParent = Parent;
createFormItems();
sizeForm(FontSize);
}
其中方法createFormItems和sizeForm是在派生类和print entry语句中定义的。
调用此处理程序Start方法生成输出:
TT_FORM构造函数
TT_FORM createFormItems
TT_START sizeForm
我期待的输出是:
TT_FORM构造函数
TT_FORM createFormItems
TT_FORM sizeForm
TT_START构造函数
TT_START createFormItems
TT_START sizeForm
有谁可以解释为什么这个呼叫序列与我的期望不同? 我需要哪些更改才能获得我需要的调用序列?
答案 0 :(得分:0)
经过一些工作,我解决了这个问题,并意识到: 1.我已将createFormItems声明为private,因为它仅从构造函数中调用。这是超级构造函数所期望的。 2.我已将sizeForm声明为public,以便也可以从处理程序中调用它。这不是从构造函数中的调用中调用的。
sizeForm被子类覆盖,但是从父类构造函数中调用。这不是我期望继承操作的方式。 一般规则必须是构造函数调用的所有方法都必须是私有的,并且外部使用需要额外的公共方法。