public class Person
{
private String name;
private String streetAddress;
private String cityStateZip;
public Person()
{
name = "John Doe";
streetAddress = "55 Main Street";
cityStateZip = "Anywhere, MA 00001";
}
public Person(String n, String s, String c)
{
name = n;
streetAddress = s;
cityStateZip = c;
}
public String getName()
{
return this.name;
}
public void setName()
{
this.name = name;
}
public String getStreetAddress()
{
return this.streetAddress;
}
public void setStreetAddress()
{
this.streetAddress = streetAddress;
}
public String getCityStateZip()
{
return this.cityStateZip;
}
public void setCityStateZip()
{
this.cityStateZip = cityStateZip;
}
public String toString()
{
String str = name + "\n" + streetAddress + "\n" + cityStateZip + "\n";
return str;
}
}
在上面的代码中,我编写了一个类,该类将创建一个person对象,并将用于创建其他类来实现此person类。当我在写这个超类时,我想到了setter方法和构造函数之间的区别是什么? setter方法是否简单有用,因为您可以轻松地执行.set(methodName)或?有人愿意解释我的构造函数和setter方法之间的区别吗?
答案 0 :(得分:3)
设置器设置先前创建的“对象”属性的值。 在您的情况下,构造函数使用一堆预定义值创建对象。
Class Pizza
Attributes: boolean Extra Cheese , boolean Extra mayonnaise
Ex构造函数调用:
Pizza Margherita = new Pizza(true, false) //sets value of attributes, i.e you want extra cheese or mayonnaise?
外部设置呼叫:
Pizza Marinara= new Pizza();
public void setCheese (boolean cheese ) { //sets the values explictly
this.cheese = cheese ;
}
public void setMayonnaise (boolean mayonnaise) {
this.mayonnaise= mayonnaise; //sets the value explictly
}
当我们需要创建带有属性值的对象时,应该使用构造器方法,而不是为每个值显式调用setter并进行设置。
尽管两者都有不同的优势,并且非常适合Java生态系统。 如果您想拥有一个不可变的类,请使用构造函数,否则请使用setter。
如果您想拥有一个不可变的类,请使用构造函数,否则请使用setter。
使用Setters()
或变异子,可以为调用方提供更新特定实例变量的值的机会。
更多:
构造函数不必具有访问说明,return
类型,而setter则需要具有访问说明。
答案 1 :(得分:2)
构造函数构造新对象,并在其中创建设置器以更新该对象。
因此,假设您的名字是Ding Dong并且您居住在此地,并使用您的名字和以下地址创建了一个person对象。
12345 15th Street
Area 51, Nevada 12345
然后您沿着街上的几个街区移动到:
1234 15th Street
Area 51, Nevada 12345
因为您已经移动了,所以您无需创建新的Person
对象,只需更新地址即可。那就是您将使用setter方法的地方。
结论: 设置员在那里更新您的记录,构造函数在那里创建新的Person对象。
我希望这会有所帮助!!!!
答案 2 :(得分:2)
设置者
构造函数