如何为成员分配构造函数参数

时间:2019-04-12 08:57:29

标签: java constructor

我是Java新手,我也想知道如何在带有参数的构造函数中正确分配值。问题是如何正确封装值,即我们使用set方法还是仅使用this关键字就足够了?请注意,我在询问封装和OOP。

public class cars{
    private String make;
    private String model;
    public String getMake(){
        return make;
    }
    public String getModel(){
        return model;
    }
    public void setMake(String ParamMake){
        this.make = ParamMake;
    }
    public void setModel(String ParamModel){
        this.model = ParamModel;
    }

    // Should it use the setter
    public cars(String make,String model){
        setModel(model);
        setMake();
    }
    // Or
    public cars(String make,String model){
        this.model = mode;
        this.make = make;
    }
}

4 个答案:

答案 0 :(得分:2)

对此有两种思想流派:

  1. 永远不要从构造方法 设置程序中调用可重写的¹方法;如果您有二传手,请务必使用它,因此仅在一个中央位置进行成员分配。

  2. 永远不要从构造函数中调用可重写的方法,甚至不要使用setter方法。只需直接通过this.make = make;进行分配即可。

我相信#2是更广为接受的思想流派。 #1的问题在于,如果子类覆盖了setter,则在构造过程中最终会产生难以理解的串扰。


侧面说明:Java具有良好的命名约定。类名应以大写字母开头;变量,参数和方法名称不应该。所以Cars,而不是cars,而paramModel,而不是ParamModel


¹“可覆盖”-例如,非private,非final方法。

答案 1 :(得分:0)

使用this.是您想要的,getter / setter用于外部类,由于它们是私有的而无法读取字段

答案 2 :(得分:0)

这篇文章为您提供所需的信息,

Encapsulation vs Data Hiding - Java

  

更一般地说,封装只是指将数据(例如对象的数据)与对该数据的操作捆绑在一起。因此,您有一个封装数据的类-字段-以及处理该数据的方法。

注意:这是为了清除有关封装的概念。

对于您的特定答案,它是使用this.variableName = variableName的标准,其中variableName是您的变量。

答案 3 :(得分:0)

第二种方法很好,

public cars(String make,String model){
          this.model = mode;
          this.make = make;
         }

还请注意,由于您不熟悉Java,将来您可能会将其他class es对象传递给类构造函数,所以使用上述方法也将帮助您进行依赖项注入。