跳过父构造函数以调用祖父的

2022-09-03 08:42:29

问题是这样的:我有一个抽象类,它在其构造函数中做了一些工作,还有一组实现抽象类的子类:

class AbstractClass {
     AbstractClass(){ /* useful implementation */ }
}

class ConcreteClass1 extends AbstractClass {
     ConcreteClass1(){ super(); /* useful implementation */ }
}

然后,需要自定义具体类,一个解决方案是扩展具体类:

class CustomizedClass1 extends ConcreteClass1 {
    CustomizedCLass1(){ super(); /* useful implementation */ }
}

但问题是自定义类只需要调用抽象类的构造函数,而不需要调用具体类的构造函数。

您如何实现这一目标?更改类关系的建议是有效的。

编辑:具体的例子是 ConcreteClass1 和 CustomClass1 具有不同的数据集(ConcreteData1 和 CustomData1),它是从类的构造函数的数据库中检索的。问题在于,创建 CustomClass1 的实例将检索这两个数据实体。

我知道使用简单的继承可能不是最好的办法,这就是为什么我指出改变类关系的建议是有效的。


答案 1

你不能在Java中这样做。我经常有学生想这样做,但我从未见过他们真正想做的事情。

你能举一个具体的例子来说明你想做什么以及为什么(你的描述太模糊了),我相信可以实现一个解决方案:-)

编辑:

对于为什么你不想这样做(通常)的真实世界的例子是一个层次结构,如:

Animal (constructor makes the eyes)
  |
Mammal (constructor makes the lungs)
  |
Human (constructor sets the language)

如果人类构造器可以跳过哺乳动物构造器,那么你最终会得到一个没有肺的人类......不是很有用。


答案 2

很简单(但为什么?

class AbstractClass {
   AbstractClass(){ /* useful implementation */ }
}

class ConcreteClass1 extends AbstractClass {
     ConcreteClass1(){ super(); /* useful implementation */ }
     ConcreteClass1(boolean skip){ super(); }
}
class CustomizedClass1 extends ConcreteClass1 {
     CustomizedCLass1(){ super(true); /* useful implementation */ }
}