我正在回顾一下面向对象的编程,但有一点我不太明白,那就是为什么要使用构造函数或使用 getter 和 setter 来为有问题的对象赋值。
首先,我知道必须使用 Getter 才能看到数据,因为如果我们封装它,它就不允许我们访问它。
但是我对setter不是很了解,为什么理论上变量也不能通过构造函数传递呢?那么为什么要创建setter呢?是否能够在创建后对其进行编辑?
如果我说的不明白,我再解释一遍
public class Persona {
private String nombre;
private int edad;
public Persona(String nombre, int edad) {
this.nombre = nombre;
this.edad=edad;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getNombre() {
String nombre = this.nombre;
return nombre;
}
}
public class CrearPersona {
public static void main(String[] args) {
Persona persona = new Persona("Fernando",12);
System.out.println(persona.getNombre());
persona.setNombre("Luis");
System.out.println(persona.getNombre());
}
}
没错,你说的。设置器的想法是能够修改对象的内部状态,一旦它已经被构建。很多时候我们不希望修改那个状态,所以我们不能添加setter,并且让所有的实例变量
final
,原则上会使我们的对象不可变,一旦构建,就不可能改变状态。但是你必须小心,因为某些属性本身可能不是不可变的,例如 type 的变量java.util.Date
,即使final
它可以从类外部访问,因为它恰好有一个 getter,你可以改变的不是对象,而是它的价值。例如:
在这里,虽然日期是最终的,但它的值仍然可以修改。
出于同样的原因:
encapsulacion
.对象的所有属性都应该是私有的,并且只能使用 public(
setter
)方法访问。另外,在这
setter
里面,你可以设置你自己的限制,比如哪个ID号是数字和数字或者你想到的任何东西。使用正确的构造函数,您可以传递参数,但想象它是一个未知参数。
您别无选择,只能创建没有该参数(或重载)的构造函数并创建一个
setter
.getter 和 setter 用于以受控的方式访问属性,因此任何类都不能从它们外部修改所述属性的值,这是一种封装原则,同时可以对某些条件进行编码或进行更改在将输入数据传递给类属性之前。
构造函数用于定义当我们使用 new 运算符创建类的实例时会发生什么,构造函数允许我们为字段分配默认值或在需要时调用另一个构造函数或方法。
你好!我们知道Java中的封装是用来隐藏类的方法和属性(变量)的。这在与其他程序员共享我们的类时很有用。
但是,有时有必要或要求在不删除封装的情况下授予对我们类的某些属性的访问权限,因为不应公开考虑共享访问权限。
对于这些情况,有 setter() 和 getter() 方法。
这些方法用于访问私有封装的类的属性,以便从封装的属性中获取数据。
setter 方法用于为我们的私有封装类的属性赋值。这是直接用这个方法完成的。由于此方法不返回任何内容,因此它的结构中必须包含单词 void,并且必须始终接收输入参数。
getter 方法访问该类以返回我们想要的任何属性的值。此方法必须返回一个值,因此此方法的结构必须包含我们将使用该方法返回的值的类型。
在构造函数中定义一个属性用于保证如果创建了对象,它必然会定义该属性。
请注意,如果在创建对象后调用 getParameter 会发生什么:
如您所见,如果在创建和设置器之间访问该属性,它将是未定义的。
这并不意味着您总是必须定义构造函数的属性,在某些情况下,由于您正在执行的程序的性质,在创建对象时必须未定义某些属性并且您必须给它们以后的那个值。如果需要多次更改属性值,setter 也会派上用场,因为构造函数只对给定对象执行一次,但 setter 可以根据需要多次调用。