【发布时间】:2015-01-08 21:03:31
【问题描述】:
我有一个关于以下代码的简短问题
http://www.androidhive.info/2013/09/android-sqlite-database-with-multiple-tables/
这里使用了两个构造函数,一个带有 id,另一个没有 - 我不明白为什么。有什么好处?
我已经阅读了这个帖子:
Why does this class have two constructors?
我能理解的答案是,我可以创建一个带有 id 而不是 id 的标签,但我试图理解,如何知道它应该使用哪个构造函数?仅仅是参数的数量吗?
public class Tag {
int id;
String tag_name;
// constructors
public Tag() {
}
public Tag(String tag_name) {
this.tag_name = tag_name;
}
public Tag(int id, String tag_name) {
this.id = id;
this.tag_name = tag_name;
}
// ...
}
【问题讨论】:
-
Tag tag = new Tag();,无参数构造函数;Tag tag = new Tag("name");带字符串参数的构造函数;程序员和编译器很容易看出区别 -
是的,只根据传递的参数的数量和类型。
-
是的,参数的顺序和类型构成了构造函数的签名,所以就像凯文说的那样,new Tag() 是没有任何参数的。 new Tag("string") 将是带有标签的标签。 new Tag(123, "string") 将调用构造函数 id number 和 string.. 但是 new Tag("string", 123) 会给你一个编译错误,因为没有看起来像 public Tag(String tag_name, int id)。
-
已经提供了所有答案。但是,默认构造函数(不接受任何参数的构造函数)并不是真正需要实现的,因为当它被排除在实现之外时将由编译器定义。尝试通过查看提供的签名(因此是参数)来决定使用哪一个。
-
@RvdV79 不正确。编译器只在用户自己没有定义的时候才合成一个默认参数。
标签: java constructor default-constructor