您可以在构造函数中实例化另一个类吗?如果不是,那为什么呢?
public class Class1() {}
public class Class2() {
public Class2() {
Class1 c1 = new Class1();
}
}
答案 0 :(得分:2)
是的,但是让我澄清一下,因为您似乎是个初学者(顺便欢迎您的到来):您实例化了Class1
的 object 。类不能实例化。在您的示例中,该对象是一个局部变量,一旦执行了构造函数中的所有代码,该局部变量将被销毁。实际上,这意味着您只能在构造函数内部之外的任何地方使用c1
。您可以通过在类主体中将其声明并将其存在与{的对象的存在性联系起来,使其成为Class2
的成员(特别是字段)。 {1}},例如:
Class2
这允许public class Class1() { }
public class Class2()
{
Class1 c1;
public Class2()
{
c1 = new Class1();
}
}
在类内部的任何地方使用。
答案 1 :(得分:1)
是的,您绝对可以在另一个类的构造函数方法中实例化一个类。您面临的问题是可变范围,即在何处不能使用/访问它。您需要在要使用它的“区域”中定义变量,即在您的类,构造函数,方法,属性等中定义。使用原始文章中的代码,我将尝试进行解释。
要实例化的类:
public class Class1()
{
}
执行实例化的类:
public class Class2()
{
public Class2()
{
Class1 c1 = new Class1();
}
}
由于变量c1
是在构造函数中定义的,因此无法在任何地方使用。您只能在此构造函数中使用它,因为这是定义它的地方。
如果您希望能够在Class2
的其他地方使用它,那么我建议您在构造函数之外定义它,如下所示。这样,您可以在Class2
中的任何地方使用它:
public class Class2()
{
Class1 c1 = null;
public Class2()
{
// You can instantiate it in the constructor
c1 = new Class1();
}
}
或者您也可以在Class2
中的方法中使用它,例如:
public class Class2()
{
Class1 c1 = null;
public void Method1()
{
// You can instantiate it in the method
c1 = new Class1();
}
}
随便看看,看看什么对您有用。我通常在要使用它的地方实例化一个类。例如,如果我需要一个方法中的Class1
,那么这里就是我要定义和实例化它的地方:
public class Class2()
{
public void Method1()
{
Class1 c1 = new Class1();
}
}
我希望这会有所帮助。