#java #parameters #constructor
#java #параметры #конструктор
Вопрос:
В настоящее время я рассматриваю в целом (два) способа создания конструкторов, как стандартных, так и параметризованных, и я хотел бы спросить, в чем разница между этими двумя примерами.
Пример A:
public class dog {
private String dogName;
public dog() {
dogName = "Toby";
}
public String getDogName() {
return dogName;
}
public static void main(String args[]) {
Dog object = new Dog();
System.out.println(object.getDogName());
}
}
Пример B:
public class dog {
private String dogName;
public dog (String dogName) {
this.dogName = dogName;
}
public static void main(String args[]) {
Dog object = new Dog();
System.out.println(object.getDogName());
}
public static void main (String[] args) {
Dog object = new Dog("Toby");
System.out.println(object.dogName);
}
}
Комментарии:
1. Вы можете динамически создавать
Dog
экземпляр с именем во 2-м экземпляре.2. @Rono это за пределами моего понимания, у вас есть пример того, что такое «динамическое построение»?
3. Второй дает вам больше гибкости в том смысле, что вы можете создавать разные экземпляры Dog и присваивать им разные имена, где в качестве первого типа создаются разные экземпляры Dog по имени Toby.
4. Пример A — Всех собак зовут Тоби. Пример B — Dogs получают данное им имя. Конструкторы параметров означают, что вы можете настраивать некоторые поля при построении.
Dog dog = new Dog("Toby");
Конструкторы по умолчанию нуждаются в настройке после создания объектаDog dog = new Dog(); dog.Name="Toby";
Ответ №1:
Пример A:
public Dog() {
dogName = "Toby";
}
Вы жестко кодируете «Toby» здесь. Итак, каждый раз, когда вы создаете экземпляр объекта типа Dog, dogName
будет инициализироваться значением «Toby» в качестве значения по умолчанию, потому что у вас нет возможности динамически передавать данные во время создания экземпляра объекта с new
ключевым словом.
Пример B:
public Dog(String dogName) {
this.dogName = dogName;
}
Вы динамически передаете значение каждый раз, когда создаете объект типа Dog. Каждый раз, когда вы это делаете, dogName
будет инициализироваться тем, что вы передаете в качестве аргумента в constructor.