是否有可能从另一个只扩展一个具有包可见性的构造函数的类扩展一个类?

时间:2012-11-26 11:54:39

标签: java

我希望能够做到以下几点,记住A和B类在两个不同的包中,我不能修改A类或将B类放在A类的同一个包中: / p>

class A{
    A(){
        //stuff
    }
}

class B extends A{
    public B(){
        //stuff
    }
}

这段代码给出了#34;找不到simbol:构造函数A"。有没有办法解决这个问题?

4 个答案:

答案 0 :(得分:3)

如果您无法更改A类,您可以尝试将新类添加到A所在的包中并将其扩展为使用A,然后使用B将其从新类扩展。

答案 1 :(得分:2)

除非您将 A级公开答案,因为 A级有< strong>默认范围仅限于包级别。使其在您的软件包之外访问将其标记为公开

答案 2 :(得分:2)

类在构造函数中做的第一件事是调用其超类的构造函数。由于A类没有公共的无参数构造函数,因此无法按照您尝试的方式扩展B.

如果有一个带有参数的公共构造函数,只要你调用super(arg1,...),就可以扩展它。作为类的构造函数中的第一个调用:

public B()
{
    super(arg1, arg2, argN);
    // stuff
}

答案 3 :(得分:0)

您说您不能将B类放在与A相同的包中。但是你可以在那个包中加入一些帮助H级吗?我的意思是:

package a;

class A { ... }

package a;

public class Helper extends A {
    public Helper() { }
}     

package b;

import a.Helper;

class B extends Helper {
    B() { }
}

我猜你正在处理密封包,所以这是不可能的,但如果不是这样,那么这个解决方案应该可行。