public ClassName extends SuperClassName {
public ClassName(String item, List stuff) {
// no explicit super class constructor called
...
}
}
在编译器中转换为
public ClassName extends SuperClassName {
public ClassName(String item, List stuff) {
// explicit super class constructor call to SuperClassName(item, stuff);
super(item, stuff);
...
}
}
要定义复制构造函数,没有特殊语法,基本上是定义一个以类的另一个实例为参数的构造函数
public ClassName(ClassName other) {
field = other.field;
field2 = other.field2;
field3 = new ArrayList(other.field3);
...
}
# 1 楼答案
如果不生成任何构造函数,则编译器只隐式添加一个默认构造函数。它是非参数化构造函数
从documentation开始:
编译器自动为任何类提供无参数的默认构造函数 没有构造函数。此默认构造函数将调用的无参数构造函数 超类。在这种情况下,如果超类不存在,编译器将发出抱怨 有一个无参数构造函数,所以必须验证它是否有。如果你的班级没有 显式超类,然后它有一个对象的隐式超类,它确实有一个 没有参数构造函数
在Java中,没有复制构造函数。如果显式地定义一个,那么这是另一个问题,但是编译器永远不会在Java中自动定义这样的东西
# 2 楼答案
如果未指定构造函数,则会自动定义一个空构造函数。 只要指定一个或多个构造函数,就只定义这些构造函数
Java中没有复制构造函数,但每个类都是从Object扩展而来的,Object是一个clone()方法
# 3 楼答案
只有一个默认构造函数,只有在声明类没有构造函数时才定义它。否则,声明的构造函数将是唯一的构造函数。如果不包含构造函数,编译器将插入与
此外,如果您确实为一个类声明构造函数,并且没有显式定义该超类的构造函数调用,编译器将插入一个与该超类匹配的参数调用
在编译器中转换为
要定义复制构造函数,没有特殊语法,基本上是定义一个以类的另一个实例为参数的构造函数
没有默认的复制构造函数,实际上没有复制构造函数,只有一个构造函数。如果您决定创建一个或多个似乎是复制对象的对象,那么就这样吧
Java需要较少类型的项的原因在某种程度上与不重载基本运算符有关。如果不在
=
上赋予更多含义,那么就不需要那么多类型的构造函数来支持不同的对象分配方法=
之所以可以如此简单地使用,原因之一是Java只传递引用,这有点像指针;但是,它们是强类型的,您不能进行任何指针计算,也不能访问偏移量。因此,它们只适用于赋值和引用传递,这可以防止大多数指针问题# 4 楼答案
最重要的是,所有的答案都很好。。只需再添加一件事,就可以更清楚地了解。。默认构造函数是编译器在您未定义任何构造函数时自行添加的构造函数。。。 根据上述ans:
public ClassName() { super(); }
但是如果你自己在类中编写构造函数。。。就像你在课堂上自己写的一样。。从技术上讲,此构造函数不会被称为默认构造函数
我希望你明白了
# 5 楼答案
一类,如
有一个默认(空)构造函数,其行为类似
Java中没有内置复制构造函数的概念,这有一个根本原因:
在Java中,变量永远不能包含对象(它只能包含对对象的引用)。因此,在执行
foo(obj)
时,不需要复制obj
引用的对象要创建对象的副本,通常需要创建一个构造函数,例如
或者您依赖于
clone()
机制相关问题: