У меня есть два вопроса о следующем коде. 1. Как конструктору третий конструктор, не используя метод set? 2. что делает это () делает в последнем конструкторе.
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 = (Строка) адрес;} Однако я не уверен в этом.
и я думаю это (); в последнем Человеке конструктора вызовов конструктора () {}, но если это делает, это, означают, что два объекта Человека создаются, когда я звоню
Person p = new Person("myName","myAddress");
Спасибо!!!
Проблема с 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;
}
The " this ()
"в вашем последнем конструкторе просто говорит этому конструктору вызвать конструктор по умолчанию как часть процесса создания объекта. Он не создает два объекта, он просто запускает код в def. конструктор, который в вашем случае ничего не делает.
Используйте фабричные методы для создания этого объекта
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 );
}
}
Но есть о чем подумать - ХОТИТЕ ли вы создать объект 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.
}
}
Вы правы насчет последнего утверждения, но два объекта Person не создаются. Внутренне это похоже на вызов метода. Я не понимаю, чего вы пытаетесь достичь с помощью этого кода.Чтобы вызвать последний конструктор, new Person («1», «2»)
или внутренне this («1», «2»)
в конструкторе. Сеттеров здесь тоже нет. Сеттеры - это такие методы, как setName (String)
, setAddress (String)
и так далее. Геттеры - это такие методы, как String getName ()
, String getAddress ()
.
Как сказано в другом ответе, у вас также не может быть двух конструкторов с одинаковыми типами аргументов. Просто создайте один конструктор со всем, что вам нужно в нем установить.