希望我能对此问题有所澄清。因此,类层次结构如下所示:
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的唯一时间是它是顶层元素时,其余的将使父级离顶层更近一步。