当子类重写超类方法时,如何正确建模更改的返回类型

时间:2010-09-30 05:24:22

标签: subclass uml override

我问的问题是我是否正确建模了UserControl的子类。具体而言,基类具有方法public abstract JComponent toComponent()。在实现过程中,子类应该覆盖保持方法签名相同的方法,除了return语句应该返回一个专门的组件,即return new JButton();当我的图的创建者理解实现应该如何看时,我可以看到另一个程序员可能如何看一下图表并得出以下结论。

public JButton toComponent(){
      if(GUIComponent == null || !(GUIComponent instanceof JButton)){
        return new JButton();
      } else{
        return (JButton) GUIComponent;
     }
}

预期的实施方式是:

  public JComponent toComponent(){
          if(GUIComponent == null || !(GUIComponent instanceof JButton)){
            return new JButton();
          } else{
            return GUIComponent;
         }
    }

在这种情况下,实施可能不是很重要,但在更复杂的系统中,它可能被证明是至关重要的。所以我想知道如何正确地模拟方法的覆盖以返回不同的类型,同时保持签名的准确性。

1 个答案:

答案 0 :(得分:0)

如果您的意图是子类签名应该返回JComponent,那么图表应该说明这一点,而不是说他们返回JButton或其他什么?

您的图表应指定实际的界面。目前,它揭示了实现的细节,即创建一个JButton对象。