Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 重载构造函数的最佳方法是什么?_Java_Constructor_Overloading - Fatal编程技术网

Java 重载构造函数的最佳方法是什么?

Java 重载构造函数的最佳方法是什么?,java,constructor,overloading,Java,Constructor,Overloading,在java for重载构造函数中,我应该写: public Livre() { this.setAutor(""); this.setTitle(""); } public Livre(String a, String t) { this(); this.setAuteur(a); this.setTitre(t); } 或 第一个在默认构造函数中具有所有默认值,但第二个似乎更广泛,为什么 谢谢 ps:对不起我的英语 public Livre() {

在java for重载构造函数中,我应该写:

public Livre() {
    this.setAutor("");
    this.setTitle("");
}
public Livre(String a, String t) {
    this();
    this.setAuteur(a);
    this.setTitre(t);
}

第一个在默认构造函数中具有所有默认值,但第二个似乎更广泛,为什么

谢谢

ps:对不起我的英语

public Livre() {
    this.setAutor("");
    this.setTitle("");
}
public Livre(String a, String t) {
    this();
    this.setAuteur(a);
    this.setTitre(t);
}
这没有什么意义,因为默认值是通过调用
This()设置的被下一个设置程序覆盖

public Livre() {
    this("", "");
}
public Livre(String a, String t) {
    this.setAutor(a);
    this.setTitle(t);
}
这与:

public Livre() {
    this.setAutor("");
    this.setTitle("");
}
public Livre(String a, String t) {
    this.setAutor(a);
    this.setTitle(t);
}
这只是为了避免代码重复


另外:你不应该在构造函数中调用setter,除非你确定它们不能在子类中被覆盖,否则你永远也不知道它们(可能)会做什么。

第二种方法,一切都通过你的
Livre(String,String)
构造函数,因此,有一点需要在将来添加额外的初始化代码。在第一个示例中调用
this()
没有任何意义,因为您会立即覆盖
author
title
的值。当然,最好的方法是只使用一个构造函数。最好为此类用户可以使用的默认值提供常量。@MonkeySupersonic,应该有
super()
而不是
this()
,这样才有意义。
public Livre() {
    this.setAutor("");
    this.setTitle("");
}
public Livre(String a, String t) {
    this.setAutor(a);
    this.setTitle(t);
}