我对以下代码有两个问题。 1.如何在不使用setter的情况下构造第三个构造函数? 2. this()在最后一个构造函数中做了什么。
public class Person { private String name; private String address; Person(){} Person(String name){ this.name = name; } Person(String address){ //Person(java.lang.String) is already defined. } Person(String name,String address){ this(); this.name = name; this.address = address; } }
我的问题解决方案是 人(对象地址){ this.address =(String)地址; } 但是,我不确定这一点。
我想这个();在最后一个构造函数中调用构造函数Person(){},但如果是,则意味着当我调用时会创建两个Person对象
Person p = new Person("myName","myAddress");
感谢!!!
答案 0 :(得分:10)
Person(String name)
和Person(String address)
的问题在于您不能拥有两个具有相同参数的构造函数。当您想要调用类似这样的内容时,编译器将不知道要调用哪一个:new Person("Joe Blow");
你可以这样做:
Person(String name)
{
this.name = name;
}
Person(String name, String address)
{
this(name);
this.address = address;
}
最后一个构造函数中的“this()
”只是告诉构造函数在构造对象的过程中调用默认构造函数。它不会创建两个对象,它只是在def中运行代码。构造函数,在您的情况下,什么都不做。
答案 1 :(得分:4)
要考虑的事情 - 您是否想要创建一个没有名称或地址的Person对象?如果你不这样做,为什么要提供那些构造函数(不是你可以 - 它们有相同的参数,所以编译器无法区分它们)?我想每个人都会有一个名字。也许有人不会有地址。
在创建构造函数之前考虑一下你的对象。
另一种可能性是:
public class Person {
private String name;
private String address;
Person(String name) {
this(name, "");
}
Person(String name, String address) {
this.name = name;
this.address = address;
// TODO - Other initializations.
}
}
答案 2 :(得分:1)
使用工厂方法构造此对象
public class Person {
private String name;
private String address;
public Person(String name, String address) {
this.name = name;
this.address = address;
}
public static Person createHomelessPerson ( String name )
{
return new Person( name, null );
}
public static Person createNamelessPerson ( String address )
{
return new Person( null, address );
}
}
答案 3 :(得分:0)
你对最后一个语句是正确的,但是没有创建两个Person对象。在内部,这就像方法调用一样。我不明白你用这段代码想要实现的目标。在构造函数中调用最后一个构造函数new Person("1", "2")
或内部this("1", "2")
。这里也没有二传手。 Setter是setName(String)
,setAddress(String)
等方法。 Getters是String getName()
,String getAddress()
等方法。
正如另一个答案所说,你也不能拥有两个具有相同参数类型的构造函数。只需创建一个构造函数,其中包含您需要设置的所有内容。
答案 4 :(得分:0)
答案 5 :(得分:0)
这会调用Person(),但不会创建两个对象。