希望我能对此问题有所澄清。因此,类层次结构如下所示:
AbstractClass,ConcreteClass1和ConcreteClass2。 ConcreteClass1扩展AbstractClass,而ConcreteClass2扩展ConcreteClass1:

ConcreteClass1中的构造方法如下:

private final AbstractClass parent;

public ConcreteClass1( int id, AbstractClass aParent )
{
  super( id );

  parent = aParent;
}


我想知道在什么情况下这可能有用。除非为aParent参数传递了null,否则我看不到如何实例化ConcreteClass1。 ConcreteClass2中使用了类似的构造函数(即,它的参数类型也为AbstractClass)。

这可以成为合理的设计吗?

最佳答案

它在任何层次结构或继承类型布局中特别有用。

例如,假设鼠标单击了GUI元素。说您的课程有方法

handleClick(int x, int y);


第一次单击可能由底层组件处理,并且让父级允许结构将点击传递给父级。这类似于向上链接方法/事件。

另外,这也可以由一些外部控制器来完成,该控制器管理click方法被调用的元素,但它可能比仅使用父模型更为复杂,或者可能不太干净(尽管并非总是如此)。

在这种类型的模型中,“父级”为null的唯一时间是它是顶层元素时,其余的将使父级离顶层更近一步。

10-07 21:03