Skip to content

Commit 504ef46

Browse files
committed
JAVA - Constructores, Encapsulación, Herencia, Modificadores y Paquetes-APIs
Signed-off-by: diwes-gh <alejandro@alejandroalsa.es>
1 parent 91978ff commit 504ef46

5 files changed

+433
-0
lines changed
Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
---
2+
title: Constructores
3+
date: 2024-01-03 12:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Constructores
9+
10+
Un constructor en Java es un método especial que se utiliza para inicializar objetos. Se llama al constructor cuando se crea un objeto de una clase. Se puede utilizar para establecer valores iniciales para los atributos del objeto.
11+
12+
```java
13+
// Crea un constructor
14+
15+
public class main{
16+
int x; // Creación de un atributo de clase
17+
18+
// Creación de un constructor de clase para la clase main
19+
public class main(){
20+
x = 5;
21+
}
22+
23+
public static void main(String[] args){
24+
main miObjeto = new main(); // Crear un objeto de la clase main (un constructor)
25+
System.out.println(miObjeto.x);
26+
}
27+
}
28+
```
29+
30+
Ten en cuenta que el nombre del constructor debe coincidir con el nombre de la clase y no puede ser de tipo de retorno (como `void`), ademas para poder llamar a un constructor es necesario que se cre un objeto, como en los métodos públicos.
31+
32+
## Parámetros del constructor
33+
34+
Los constructores también pueden tomar parámetros, que se utilizan para inicializar atributos.
35+
36+
```java
37+
public class main{
38+
int x;
39+
40+
public main(int y){
41+
x = y + 20;
42+
}
43+
44+
public static void main(String[] args){
45+
main miObjeto = new main(10);
46+
System.out.println(miObjeto.x);
47+
}
48+
}
49+
```
50+
51+
Salida:
52+
53+
```txt
54+
30
55+
```
56+
57+
Podemos agregar tantos parámetros como queramos
58+
59+
```java
60+
// Crea una calculadora que resuelva ecuaciones de segundo grado
61+
62+
public class main{
63+
64+
double resultadoA;
65+
double resultadoB;
66+
67+
public main(int a, int b, int c){
68+
double operaciones = b*b-4*a*c;
69+
70+
resultadoA = (-b + Math.sqrt(operaciones)) / (2*a);
71+
resultadoB = (-b - Math.sqrt(operaciones)) / (2*a);
72+
}
73+
74+
public static void main(String[] args){
75+
main ecuacionesSegundoGrado = new main(2, 5, 2);
76+
System.out.println("Resultado A: " + ecuacionesSegundoGrado.resultadoA);
77+
System.out.println("Resultado B: " + ecuacionesSegundoGrado.resultadoB);
78+
}
79+
}
80+
```
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
---
2+
title: Encapsulación
3+
date: 2024-01-03 12:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Encapsulación
9+
10+
El significado de encapsulación es asegurarse de que los datos sensibles estén ocultos de los usuarios, para poder lograr esto debemos declarar las variables y los atributos como `private` y proporcionar acceso publico y establecer métodos para acceder y actualizar el valor de na variable `private`
11+
12+
## Obtener y configurar
13+
14+
En otras publicaciones vimos que las variables declaradas como `private` solo pueden ser accedidas dentro de la misma clase, sin embargo, es posible acceder a ellas si proporcionamos métodos públicos de obtención y configuración.
15+
16+
La sintaxis de ambas es que empiezan por `get` o `set`, seguidas del nombre de la variable, con la primera letra en mayúscula.
17+
18+
```java
19+
public class persona{
20+
private String nombre; // private = acceso restringido
21+
22+
// get
23+
public String getnombre() {
24+
return nombre;
25+
}
26+
27+
// set
28+
public void setnombre(String nuevoNombre){
29+
this.nombre = nuevoNombre;
30+
}
31+
}
32+
```
33+
34+
El método `get` devuelve el valor de la variable `name`
35+
36+
El método `set` toma un parámetro (`nuevoNombre`) y lo asigna a la variable `nombre`. Después la utilizamos la palabra clave `this` para referirnos al objeto actual.
37+
38+
Sin embargo, como `nombre` esta declarado como `private`, no podremos acceder a ella fuera de la clase.
39+
40+
```java
41+
public class main{
42+
public static void main(String[] args){
43+
persona miObjeto = new persona();
44+
miObjeto.nombre = "Alex"; // Error
45+
System.out.println(miObjeto.nombre); // Error
46+
}
47+
}
48+
```
49+
50+
Si la variable estuviera declarada como `public`, nos devolvería: `Alejandro`, pero como esta declarada como `private`, obtendremos un error.
51+
52+
Para evitar este error utilizaremos `getNombre()` y `setNombre()` para poder acceder y actualizar la variable.
53+
54+
```java
55+
public class main{
56+
public static void main(String[] args){
57+
persona miObjeto = new persona();
58+
miObjeto.setNombre("Alex");
59+
System.out.println(miObjeto.getNombre());
60+
}
61+
}
62+
```
63+
64+
## ¿Por qué encapsular?
65+
66+
* Mejor control de los atributos y métodos de clase
67+
* Los atributos de clase se pueden hacer de solo lectura (si solo utilizamos `get`) o de solo escritura (si solo utilizamos `set`)
68+
* Flexible, el programador puede cambiar una parte del código sin afectar a otras partes
69+
* Mayor seguridad de los datos

_posts/2024-01-03-java-herencia.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: Herencia
3+
date: 2024-01-03 12:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Herencia
9+
10+
En Java es posible heredar atributos y métodos de una clase a otra (herencia), este concepto lo podemos categorizar en dos categorías:
11+
12+
* **Subclase** (secundaria): La clase que hereda de otra clase
13+
* **Superclase** (padre): La clase de la que se hereda
14+
15+
Para heredar de una clase, utilizamos la palabra clave `extends`
16+
17+
En el siguiente ejemplo la clase `coche` (subclase) hereda atributos y métodos de la clase `vehiculos` (superclase)
18+
19+
```java
20+
class vehiculo {
21+
protected String marca = "Ford"; // Atributo del vehículo
22+
public void bocina(){ // Método del vehículo
23+
System.out.println("Tuut, tuut!");
24+
}
25+
}
26+
27+
class coche extends vehiculo {
28+
private String nombreModelo = "Raptor"; // Atributo del coche
29+
public static void main(String[] args){
30+
31+
32+
// Creo mi objeto coche
33+
coche miCoche = new coche();
34+
35+
// Llamo al metodo bocina (de la clase de vehículo) en el objeto coche
36+
miCoche.bocina();
37+
38+
39+
// Muestro el valor del atributo nombreModelo de la clase vehiculo y el valor del nombreModelo de la clase coche
40+
System.out.println(miCoche.marca + " " + miCoche.nombreModelo);
41+
}
42+
}
43+
```
44+
45+
Si te das cuenta establecemos el atributo de marca en vehículo con un `protected`. Si estuviera configurado en private, la clase `coche` no podría acceder a él.
46+
47+
Al igual que definíamos variables con `final` para evitar su modificación, en las clases también lo podemos hacer añadiendo la misma palabra clave (`final`):
48+
49+
50+
```java
51+
final class vehiculo {
52+
// ...
53+
}
54+
55+
class coche extends vehiculo {
56+
// Error
57+
}
58+
```
Lines changed: 131 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,131 @@
1+
---
2+
title: Modificadores
3+
date: 2024-01-03 12:00:00 +0800
4+
categories: [Programación, Java]
5+
tags: [Java]
6+
---
7+
8+
# Modificadores
9+
10+
Si has leído los otras publicaciones relacionadas con el curso de Java ya estarás mas que familiarizado con `public class main` palabra clave que aparece en todos mis ejemplos.
11+
12+
La palabra clave `public` es un modificador de acceso, lo que significa que se utiliza para establecer el nivel de acceso para clases, atributos, métodos y constructores.
13+
14+
Dividiremos los modificadores en dos grupos:
15+
16+
* **Modificadores de acceso**: Controla en nivel de acceso
17+
* **Modificadores sin acceso**: No controla el nivel de acceso, pero proporciona otras funciones
18+
19+
## Modificadores de acceso
20+
21+
Para **las clases**, podemos utilizar cualquiera de los dos: `public` y `default`
22+
23+
* `public` La clase es accesible por cualquier otra clase
24+
25+
```java
26+
public class main{
27+
public static void main(String[] args){
28+
System.out.println("alejandroalsa.es");
29+
}
30+
}
31+
```
32+
33+
* `default` La clase sólo es accesible por las clases del mismo paquete. Esta se utiliza cuando no se especifica un modificador. (Mas adelante veremos los paquetes)
34+
35+
```java
36+
class main{
37+
public static void main(String[] args){
38+
System.out.println("alejandroalsa.es");
39+
}
40+
}
41+
```
42+
43+
Para **atributos, métodos y constructores**, podemos usar los siguientes:
44+
45+
* `public` El código es accesible por otras clases
46+
* `private` El código solo es accesible dentro de la clase declarada
47+
48+
```java
49+
public class main{
50+
51+
private String nombre = "Alejandro";
52+
private String apellidos = "Alfaro Sánchez";
53+
54+
public static void main(String[] args){
55+
main nombreApellidos = new main();
56+
System.out.println(nombreApellidos.nombre + " " + nombreApellidos.apellidos);
57+
}
58+
}
59+
```
60+
61+
* `default` El codigo solo es accesible en el mismo paquete, se suele utilizar cuando no se especifica un modificador (Más adelante veremos los paquetes)
62+
63+
```java
64+
class main{
65+
66+
String nombre = "Alejandro";
67+
String apellidos = "Alfaro Sánchez";
68+
69+
public static void main(String[] args){
70+
main nombreApellidos = new main();
71+
System.out.println(nombreApellidos.nombre + " " + nombreApellidos.apellidos);
72+
}
73+
}
74+
```
75+
76+
* `protected` El código solo es accesible en el mismo paquete y subclases. (Más adelante veremos las subclases, superclases y herencia)
77+
78+
```java
79+
class persona{
80+
protected String nombre = "Alejandro";
81+
protected String apellidos = "Alfaro Sánchez";
82+
protected int edad = 20;
83+
protected String correoElectronico = "alejandro@alejandroalsa.es";
84+
}
85+
class estudiantes extends persona{
86+
private int fechaGraduacion = 2024;
87+
public static void main(String[] args){
88+
estudiantes miObjeto = new estudiantes();
89+
System.out.println("Nombre: " + miObjeto.nombre + " " + miObjeto.apellidos);
90+
System.out.println("Edad: " + miObjeto.edad);
91+
System.out.println("Correo Electrónico: " + miObjeto.correoElectronico);
92+
System.out.println("Año de graduación: " + miObjeto.fechaGraduacion);
93+
}
94+
}
95+
```
96+
97+
## Modificadores de no acceso
98+
99+
Para **las clases**, puedes usar cualquiera de los dos, `final` o `abstract`.
100+
101+
* `final` La clase no puede ser heredada por otras clases (más adelante veremos mas sobre herencia).
102+
103+
* `abstract` La clase no puede utilizarse ara crear objetos, para acceder a una clase abstracta, debe heredarse de otra clase (más adelante veremos mas sobre herencia).
104+
105+
```java
106+
// Clase abstracta
107+
108+
abstract class main{
109+
public String nombre = "Alejandro";
110+
public String apellidos = "Alfaro Sánchez";
111+
public String correoElectronico = "alejandro@alejandroalsa.es";
112+
public int edad = 20;
113+
public abstract void estudiante(); // Método abstracto
114+
}
115+
116+
class estudiantes extends main{
117+
public int fechaGraduacion = 2024;
118+
public void estudiante(){
119+
System.out.println("Estudiar todo el día");
120+
}
121+
}
122+
```
123+
124+
Para **atributos y métodos**
125+
126+
* `final` Los atributos y métodos no pueden ser modificados.
127+
* `static` Los atributos y métodos pertenecen a la clase, en lugar de a un objeto
128+
* `abstract` Sólo se puede utilizar en una clase abstracta, y sólo se puede utilizar en métodos. El método no tiene cuerpo, por ejemplo `abstract void run();`. El cuerpo es proporcionado por la subclase (heredado de).
129+
* `transient` Atributos y métodos se omiten al serializar el objeto que los contiene
130+
* `synchronized` Los métodos sólo pueden ser accedidos por un hilo a la vez
131+
* `volatile` El valor de un atributo no se almacena en caché localmente, y siempre se lee de la "memoria principal".

0 commit comments

Comments
 (0)