是否可以在父级内部调用子级的构造函数?

时间:2013-08-01 15:29:44

标签: java oop inheritance

我的实际设置有点复杂,所以我将制定一个更通用的例子。请考虑以下类(使用Java语法):

class Set
{
...
    Set subSet(Element[] elementList)
    {
    ...
    }
}

class SetOfNumbers extends Set
{
...
    int operationOnSetsOfNumbers()
    {
    ...
    }
}

我希望能够编写以下代码:

Set someSet = new SetOfNumbers(...);
System.out.println(someSet.subset(...).operationOnSetsOfNumbers());

当然,这不会编译,因为operationOnSetsOfNumbers()不是Set的成员。一种解决方案是分别为每个子类实现subSet方法,每次给它适当的返回类型,但如果subSet的实现很复杂并且有很多子节点,这显然是不优雅的。我想以某种方式引用Set的成员函数中的Set的任意子项,但我想不出这样做的方法。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

您可以从泛型中受益如下:

class Set<T extends Set<T>>
{
    ...
    T subSet(Element[] elementList)
    {
        ...
    }
}

class SetOfNumbers extends Set<SetOfNumbers>
{
    ...
    int operationOnSetsOfNumbers()
    {
        ...
    }
}

因此,当您在subSet()实例上调用SetOfNumbers方法时,返回类型将为SetOfNumbers而不是Set。因此,您可以在调用subSet()后调用operationOnSetsOfNumbers