我们都知道JVM在每个java程序中为我们提供了一个默认构造函数。
但是如果我们声明任何其他类型的构造函数,那么它就不会提供任何类型的默认构造函数。
所以,我的问题是,当我们在程序中声明任何其他类型的构造函数时,必须声明默认构造函数。
如果是,那么解释为什么? 如果否,那么也解释为什么?
为解决方案提供适当的合适示例。
答案 0 :(得分:1)
不,这根本不是强制性的。有很多类没有默认构造函数,没有什么能阻止你编写自己的构造函数。我想到的是java.awt.Color
。
答案 1 :(得分:1)
声明默认构造函数取决于业务需求,从技术上讲,它不是强制性的。
如果你想只用一组参数初始化一个类,那么你可以跳过默认的构造函数,它确实迫使你 - 给出创建对象所需的值
例如,
public class ClassA {
String name;
ClassA(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
对于上述课程,如果你想这样做,
ClassA obj = new ClassA();
这是不可能的,因为没有默认构造函数。
ClassA obj = new ClassA("name");
以上是创建对象的唯一方法,因为name是应该给出的参数。
如果要创建两者,请将默认构造函数添加为
ClassA() {}
提供了使用out name创建对象的方法。
答案 2 :(得分:1)
不,这不是cumpolsory。
class Dog {
Dog(String name)
{
system.out.println("Dog :" + name);
}
public static void main(String[] args)
{
Dog d = new Dog("dollar"); // works fine
Dog d2 = new Dog() // error , no default constructor defined for Dog
}
}
答案 3 :(得分:1)
所以,我的问题是,必须声明默认值 当我们在我们中声明任何其他类型的构造函数时的构造函数 程序
不,没有必要拥有默认构造函数。
如果否,那么也解释为什么?
默认构造函数将由Compiler提供,仅当您没有定义任何无参数的构造函数时。但是,请记住以下内容,从JLS
检查模式<强> 8.8.9。默认构造函数
如果类不包含构造函数声明,则为默认值 没有形式参数且没有throws子句的构造函数 隐含地宣布。
如果声明的类是原始类Object,那么 默认构造函数有一个空体。否则,默认 构造函数只调用没有的超类构造函数 参数。
如果默认构造函数是隐式的,则是编译时错误 声明但超类没有可访问的构造函数 (§6.6)不带参数且没有抛出条款。
答案 4 :(得分:0)
不,这不是强制性的! 但是如果你没有默认的构造函数(无参数构造函数),并且你想要以这种形式创建类的对象
A ref = new A();
然后你可能无法做到。
答案 5 :(得分:0)
没有必要创建默认构造函数,但最好是创建默认构造函数 如果要重用您的类,那么不创建默认构造函数将限制您的类的可重用性 就像一个类正在扩展该类一样,派生类必须具有显式的超级调用。
请考虑以下示例: -
class Base
{
public Base(int x){
//some statements
}
/*
some methods
*/
}
class Derived
{
// only one of the following will be used
public Derived(){ // This will cause a compile-time error
//some statements
}
public Derived(){ // This will work fine
//some statements
super(x);
}
/*
some methods
*/
}
这背后的原因是,如果基类没有默认构造函数,那么派生类必须在其所有构造函数声明中调用相应的super()。但是如果我们在基类中有一个默认构造函数,那么对super()的调用不是强制性的。
答案 6 :(得分:0)
不,这不是必需的。
让我解释为什么这不是必要的 您提出的问题似乎是构造函数重载。
If you create an or many parameterized constructor in java then you do need need to be worried for the default constructor.
基本上构造函数用于初始化实例变量或类成员或执行初步任务,如果您已经使用另一个构造函数完成了此操作,则不需要另一个构建函数,但如果您愿意,则可以执行此操作。 / p>
公共类基地{ int a;
public base(int x)
{
this.a=x;
System.out.println(x);
}
public base()
{
System.out.println("abc");
}
public static void main(String []a)
{
base b=new base();
b=new base(4);
}
}
输出结果为: -
ABC 4