java表单继承从超级构造函数调用错误的方法

时间:2015-02-04 15:02:35

标签: java inheritance constructor

我有四个类对象,两个处理程序类,一个基本表单类和一个派生表单类。

处理程序类包含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

有谁可以解释为什么这个呼叫序列与我的期望不同? 我需要哪些更改才能获得我需要的调用序列?

1 个答案:

答案 0 :(得分:0)

经过一些工作,我解决了这个问题,并意识到: 1.我已将createFormItems声明为private,因为它仅从构造函数中调用。这是超级构造函数所期望的。 2.我已将sizeForm声明为public,以便也可以从处理程序中调用它。这不是从构造函数中的调用中调用的。

sizeForm被子类覆盖,但是从父类构造函数中调用。这不是我期望继承操作的方式。 一般规则必须是构造函数调用的所有方法都必须是私有的,并且外部使用需要额外的公共方法。