#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