我有一个潜在的不可能的愿望。我有一个类,我想从中构建几个子类。每个子类都将实现相同的接口,但我有点希望 BASE 类调用该接口的方法。
这是我想要的编译器错误版本:
public class Class1
{
public function Class1()
{
initialize();
}
}
public interface Int
{
function initialize():void;
}
public class Class2 extends Class1 implements Int
{
public function Class2()
{
super();
}
public function initialize():void
{
// Code unique to the class goes here.
}
}
显然,即使我无意创建 Class1 的实例,这段代码也会中断。在这个简化版本中它看起来也很愚蠢,但它说明了我想要这个的原因:我希望每个类自动调用initialize()
它的构造函数,因此将它保留在超类中是有意义的。
现在,我可以做这样的事情:
public class Class1
{
public function Class1() implements Int
{
initialize();
}
public function initialize():void {}
}
public interface Int
{
function initialize():void;
}
public class Class2 extends Class1 implements Int
{
public function Class2()
{
super();
}
public override function initialize():void
{
// Code unique to the class goes here.
}
}
这就是我现在所处的位置,但是将方法放在超类中并在子类中覆盖它会破坏拥有接口的目的;只需扩展原始类即可满足initialize()
方法要求,而且我不知道我可以强制每个子类覆盖该方法。当然,我可以省略基类中的调用并将其插入到每个子类中,但我也不能强制要求拥有它。
所以我的问题是,是否存在不会中断的#1 版本(在未实现接口的基类中调用接口方法),或者是否存在将需要的#2 版本(覆盖相关方法) initialize() 被子类覆盖?