Contenido del Curso
Java Avanzado
Java Avanzado
Getter y Setter
La mejor manera de evitar el modificador de acceso private
Todos los programadores de Java utilizan construcciones llamadas getters y setters.
Los getters y setters son métodos que siguen un patrón específico. Se utilizan para evitar el modificador de acceso private
y manipular eficazmente los campos desde otra clase.
¿Qué hacen los getters y setters?
En términos simples, el setter nos permite asignar un valor a un campo específico protegido por el modificador de acceso private, mientras que el getter nos permite recuperar el valor de un campo protegido por el modificador de acceso private.
La sintaxis para un getter y un setter:
Main.java
// getter public fieldType getFieldName() { return field; } // setter public void setFieldName(fieldType field) { this.field = field; }
Como se puede observar en el código anterior, utilizamos la convención de nombres para los métodos getFieldName()
y setFieldName()
. Por lo tanto, si tenemos un campo private String name
y creamos un getter y un setter con los nombres getName()
y setName()
, respectivamente. También es importante señalar que el getter devuelve un valor del mismo tipo que el campo name
, mientras que el setter recibe un parámetro del mismo tipo que el campo name
.
Esto nos permite acceder a campos que están protegidos por el modificador de acceso private
.
Veamos un ejemplo de cómo acceder a un campo privado de la clase Person
en la clase main
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); System.out.println(bob.getName()); } } class Person { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } }
Como puedes observar, utilizamos el setter para asignar un valor al campo name
, y luego usamos el getter para mostrar el valor del campo name
en pantalla. Presta atención a la sintaxis del getter y setter, así como al hecho de que el campo name
en la clase Person
está protegido por el modificador de acceso private
.
Constructor vs Getter/Setter
¿Cuál es mejor utilizar, la inicialización mediante un constructor + la sobrescritura del método toString()
, o el uso de getters y setters?
Definitivamente es preferible utilizar getters y setters para acceder a los campos protegidos por el modificador de acceso private
. Esto proporciona mayor flexibilidad en el código y mejora su legibilidad. Cuando se observa el uso del método getName()
en el código, se entiende de inmediato que este método recupera el campo llamado name
. Lo mismo ocurre al ver el uso del método setName()
, se comprende de inmediato que se está asignando un valor específico al campo para el objeto de la clase en la que se utiliza. Si otras personas leen tu código, agradecerán ver getters y setters.
También es importante señalar que cada campo requiere su propio getter y setter. Si una clase tiene dos campos protegidos por el modificador de acceso private
, la clase debe tener un getter para cada campo, es decir, dos getters y dos setters.
Veamos un ejemplo donde añadimos un campo age
a la clase Person
:
Main.java
package com.example; public class Main { public static void main(String[] args) { Person bob = new Person(); bob.setName("Bob"); bob.setAge(27); System.out.println("Person's name: " + bob.getName() + ", Person's age: " + bob.getAge()); } } class Person { private String name; private int age; public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
Como puedes observar, hemos creado un getter y un setter para cada campo de la clase Person
. En el método main
, inicializamos los campos utilizando el setter y mostramos sus valores en pantalla utilizando el getter. El uso de estos métodos es muy conveniente, y los utilizarás con frecuencia en el futuro.
1. ¿Cuál es el propósito de utilizar getters y setters?
2. ¿Cuál es la sintaxis de un método getter en Java?
3. ¿Cuál es la sintaxis de un método setter en Java?
¡Gracias por tus comentarios!