我是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;
}
}
答案 0 :(得分: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对象传递给类构造函数,所以使用上述方法也将帮助您进行依赖项注入。