我想将ConcreteSubject类中的构造函数ConcreteSubject调用为main。我正在尝试与构造函数一起创建数组,该构造函数接受in作为初始化数组的参数。所以我不确定丢失了什么/错了。
public class ConcreteSubject extends AbstractSubject {
public int arySize;
private AbstractSpy[] spies;
public ConcreteSubject(int a) {
arySize = a;
spies = new AbstractSpy[a];
}
@Override
void notifySpies() {
}
@Override
public void addSpy(AbstractSpy spy) {
}
}
public class TestSpies {
public static void main(String[] args) {
// this is where there is something wrong as it whats another constructor created.
ConcreteSubject cs = new ConcreteSubject();
AbstractSpy spy = new ConcreteSpy();
AbstractSpy[] spies = new AbstractSpy[10];
cs.addSpy(spy);
}
}
答案 0 :(得分:3)
您如下定义了构造函数,并具有一个int参数:
public ConcreteSubject(int a) {
…
}
这意味着在调用它时,您需要传递一个int参数,例如:
ConcreteSubject cs = new ConcreteSubject(5);
答案 1 :(得分:3)
在为类创建构造函数时,java不会为您提供默认的构造函数。然后您就可以使用ConcreteSubject cs = new ConcreteSubject()来初始化您的对象
有2种解决方案来初始化数组:
在类ConcreteSubject中创建默认构造函数
public ConcreteSubject(){
}
然后初始化数组`
cs.arySize= x //whatever value you want`
cs.spies = new new AbstractSpy[a];
或者您必须像下面这样初始化对象:
ConcreteSubject cs =新的ConcreteSubject(x); //您想要什么值
答案 2 :(得分:2)
ConcreteSubject类没有默认构造函数。仅有一个具有int参数的构造函数:
public ConcreteSubject(int a) {
// ...
}
并且您必须将int
参数传递给该构造函数的调用。
因此,呼叫应如下所示:
int x = ...
new ConcreteSubject(x);
答案 3 :(得分:1)
有两种方法可以解决此问题:
A。在ConcreteSubject
类中创建非参数化的构造函数
public ConcreteSubject() {
//Initialize the variables with default values
}
B。或者,在ConcreteSubject cs = new ConcreteSubject(10);
方法中使用ConcreteSubject cs = new ConcreteSubject();
代替main
。
答案 4 :(得分:1)
如果不创建构造函数,java将自动创建默认构造函数。但是,如果创建的不是默认值,例如使用int参数创建的值,则必须自行创建默认的构造函数(如果需要),因为在这种情况下java不会创建默认的构造函数。