1

我希望能够执行以下操作,请记住 A 类和 B 类位于两个不同的包中,我不能修改 A 类或将 B 类放在 A 类的同一个包中:

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

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

此代码给出“找不到 simbol:构造函数 A”。有什么办法吗?

4

4 回答 4

3

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

于 2012-11-26T12:35:15.510 回答
2

除非您将Class A 设为 public,否则NOANSWER,因为您的Class A具有仅局限于包级别的默认范围。使其可以在您的包之外访问,将其标记为公开

于 2012-11-26T11:56:39.113 回答
2

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

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

public B()
{
    super(arg1, arg2, argN);
    // stuff
}
于 2012-11-26T12:01:04.827 回答
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() { }
}

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

于 2012-11-26T14:58:38.263 回答