如果类具有参数化构造函数,为什么Java不提供默认构造函数?请考虑以下示例
class A {
int a;
public A() {
}
public A(int val) {
a = val;
}
}
Run Code Online (Sandbox Code Playgroud)
这里我明确需要添加默认构造函数.有什么理由,为什么Java不为具有参数化构造函数的类提供默认构造函数?
原因与安全性和界面的组合有关.编译器不应该为您提供未明确定义的方法.如果您未指定任何构造函数,则一个例外是一个方便的无参数构造函数.如果确实指定了构造函数,则编译器假定您不需要任何其他构造函数.
因为如果编译器会自动为每个类提供arg构造函数,它会破坏类设计.考虑一下Scanner类.它有很少的构造函数,您可以在其中指定要从哪里读取数据.如果编译器也没有添加arg构造函数,那么在调用Scanner的一个方法从用这个构造函数初始化的对象中读取数据之后,将抛出异常,因为不会指定数据源.
| 归档时间: |
|
| 查看次数: |
7797 次 |
| 最近记录: |