【问题标题】:java forms inheritance calls wrong method from super constructorjava表单继承从超级构造函数调用错误的方法
【发布时间】:2015-04-04 03:50:55
【问题描述】:

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

处理程序类包含 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 被定义并打印入口语句。 调用处理程序 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 在派生类和打印条目语句中定义。

调用此处理程序的 Start 方法会产生输出:
TT_FORM 构造函数
TT_FORM createFormItems
TT_START sizeForm

我期待的输出是:
TT_FORM 构造函数
TT_FORM createFormItems
TT_FORM sizeForm
TT_START 构造函数
TT_START 创建表单项
TT_START sizeForm

谁能解释为什么这个调用顺序与我的预期不同? 我需要进行哪些更改才能获得所需的调用序列?

【问题讨论】:

  • 如果您能提供一个简短但完整的程序来演示该问题,那将非常有帮助 - 最好也遵循正常的 Java 命名约定...
  • 你应该通过super keyword显式调用父类方法

标签: java inheritance constructor


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    相关资源
    最近更新 更多