① 如果定义了一个有参数的构造函数,无参数的默认构造函数会失效,要想继续使用无参数的构造函数,必须使用重载重新定义一个无参数的构造函数? ② 即使在类中自定义了一个无参数的构造函数,原先的那个系统默认的无参构造函数也会失效? 综合成一句话: 类中,只要有自定义的构造函数,无论是有参数的自定义构造函数还是无参数的自定义构造函数,默认的那个无参构造函数就一定失效了?
说的对。
其实如果你想在用有参构造函数的同时又能够用无参的构造函数,你可以显示的声明一个无参的构造函数和一个有参的构造函数。
(理论上可以声明不同参数或者参数类型不同的构造函数)
eg:
class A
{
public A(){}// 无参构造函数
public A(int a){} // 带一个参数的构造函数
public A(int a, double b){} // 带两个参数的构造函数
}
然后你可以这样去使用
class B
{
A tempA = new A();
A tempA1 = new A(1);
A tempA2 = new A(1,2.0);
}
这样就可以得到类A的三个不同参数的对象了!
[/quote]
按我的说法就是,在测试类中如果new了一个无参对象,实体类对象可以不写对应的构造(public 类名)方法(系统会帮你创建);但是当一旦new了一个有参对象时,那么你new的无参对象必须要写(public 类名())这样一个无参的的方法来对应。
说的对。
其实如果你想在用有参构造函数的同时又能够用无参的构造函数,你可以显示的声明一个无参的构造函数和一个有参的构造函数。
(理论上可以声明不同参数或者参数类型不同的构造函数)
eg:
class A
{
public A(){}// 无参构造函数
public A(int a){} // 带一个参数的构造函数
public A(int a, double b){} // 带两个参数的构造函数
}
然后你可以这样去使用
class B
{
A tempA = new A();
A tempA1 = new A(1);
A tempA2 = new A(1,2.0);
}
这样就可以得到类A的三个不同参数的对象了!