setter方法和构造方法之间有什么区别?

时间:2019-03-17 04:12:53

标签: java oop constructor setter

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方法之间的区别吗?

3 个答案:

答案 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)

设置者

  1. 设置者方法可以具有传入数据的业务逻辑和验证。它们最有效,尤其是对于状态是瞬态或变化很大的对象
  2. 当与getter方法一起使用时,
  3. 设置方法更有用,因为那样可以加强Java中OOP的“封装”属性。您的实例变量可以是完全私有的。您甚至可以使您的对象也对外界隐藏。您可以查看私有构造函数和工厂方法以供参考
  4. 返回类型需要明确提及

构造函数

  1. 它仅在创建对象时使用,因此您编写的任何逻辑和验证都将需要以其他方法再次单独实现,以更新对象数据
  2. 它们具有隐式返回类型,因此我们无需编写任何内容。如果我们编写任何返回类型,则该方法不会被视为构造方法