为什么:
如果类没有提供任何constructors
,那么编译时编译器会给出default constructor(constructor without parameter)
,但如果类包含parameterized constructors
,则编译器不提供默认构造函数。
我正在编译下面的代码。它给出了编译错误。
代码:
class ConstructorTest
{
// attributes
private int l,b;
// behaviour
public void display()
{
System.out.println("length="+l);
System.out.println("breadth="+b);
}
public int area()
{
return l*b;
}
// initialization
public ConstructorTest(int x,int y) // Parameterized Constructor
{
l=x;
b=y;
}
//main method
public static void main(String arr[])
{
ConstructorTest r = new ConstructorTest(5,10);
ConstructorTest s = new ConstructorTest();
s.display();
r.display();
r.area();
}
}
控制台错误:
当我仅调用parameterized constructor
时。它的工作正常。但是想要用default constructor
调用parameterized constructor
。编译器会出现编译错误,如图所示。
任何直接的帮助都会非常值得注意。感谢
答案 0 :(得分:5)
您的问题的答案在您提供的段落中。
但是如果一个类包含参数化构造函数,则编译器不会提供默认构造函数 。
您创建了一个参数化构造函数,因此未提供默认的非构造函数,而且必须自己创建
答案 1 :(得分:1)
如果提供构造函数,则默认构造函数不会添加到您的类中。你必须自己定义它。
答案 2 :(得分:1)
使用javac ConstructorTest.java
进行编译时收到错误
因为您声明了参数化构造函数 - public ConstructorTest(int x,int y)
。因此,编译器不会为您的类提供任何默认构造函数[public ConstructorTest()
]。因此,您无法在第28行拨打公开ConstructorTest()
。
答案 3 :(得分:1)
我不知道你为什么问这个问题。你自己说“但是如果一个类包含参数化构造函数,那么编译器就不会提供默认构造函数。”......所以这就解释了!!
答案 4 :(得分:0)
之所以这样,是因为它允许人们编写如下结构:
struct Test
{
int a;
double d;
};
它没有构造函数。用户不在乎成员是否已初始化。它主要用于包含数据。然后可以通过以下方式使用它:
Test t;
最终结果是减少了打字。如果有人在意变量的初始化方式或初始化变量的逻辑与众不同,那就写一个构造函数。然后假定默认构造函数会执行某些错误或意外操作,因此就不提供它。
关于析构函数可以说同样的话。如果您不在乎,则提供了一个默认的析构函数,它以相反的顺序销毁您的成员并调用基本的析构函数。如果覆盖它,则不会产生默认值。