Как я могу установить данные в конструкторе, если все параметры являются частными?

#java #constructor

#java #конструктор

Вопрос:

Я должен написать код, например

 public class Student {
  private int id;
  private String name; 

public Student (int id, String name) {
  this.id=id;
  this.name=name;
 }
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
 

}

Теперь в ОСНОВНОМ КЛАССЕ я должен получить все значения от пользователя

Как я должен установить значение в конструкторе?? нравится это?

  String name = input.nextLine(); 
 int id = input.nextInt();

 Student student = new Student (id, name);
 

«ПРОБЛЕМА С ЭТИМ МЕТОДОМ ЗАКЛЮЧАЕТСЯ В ТОМ, ЧТО МЫ НЕ МОЖЕМ СОХРАНИТЬ АТРИБУТЫ ЗАКРЫТЫМИ, ПОТОМУ ЧТО ТЕПЕРЬ ОНИ ЯВЛЯЮТСЯ ЛОКАЛЬНЫМИ ПЕРЕМЕННЫМИ»

или

Я создаю конструктор без параметров и использую этот объект для получения значений и установки в полностью параметризованном конструкторе.

  Student st = new Student();
 student.setName(input.nextLine());
 student.setID(input.nextInt());

Student student = new Student (st.getId, st.getName);
 

Я не знаю, смог ли я объяснить, чего я хочу, но если вы это поняли, дайте мне знать

Комментарии:

1. Ваш первый подход хорош.

2. Если я использую первый метод, как я могу защитить свои атрибуты, поскольку тогда все они становятся общедоступными?

3. нет никаких проблем с тем, что вы сделали. помните: эти локальные переменные не являются активными до тех пор, пока существует объект, и они не являются частью вашего объекта.

Ответ №1:

Я бы использовал этот подход

 Student st = new Student();
st.setName(input.nextLine());
st.setID(input.nextInt());
 

Но оба в порядке. На самом деле вам не нужно создавать второй объект student во втором примере. Просто используйте тот, который вы создали заранее

Чтобы получить доступ к имени и идентификатору позже, вы можете сделать

 String name = st.getName();
int id = st.getID();
 

(Редактировать — это предполагает, что вы создаете конструктор без аргументов)

Комментарии:

1. Ваш подход не будет компилироваться, поскольку нет конструктора без параметров.

2. Конечно, я просто предположил, что он создаст конструктор no arg