La ocultación y el encapsulamiento
Permitir acceso directo a las propiedades de un objeto es peligroso: se podrían modificar estados sin respetar las reglas de validación. La solución es declarar las propiedades como private:
public class Bombilla {
private int potencia;
private int numEncendidos;
private Boolean encendida, fundida;
}
Se introduce entonces el concepto de getters (métodos de consulta) y setters (métodos modificadores):
public int obtenerNumEncendido() {
return numEncendidos;
}
public void establecerPotencia(int nuevaPotencia) {
if (nuevaPotencia > 0)
potencia = nuevaPotencia;
}
Eclipse puede generar automáticamente getters y setters mediante Source → Generate Getters and Setters.
El objeto en primera persona. Referencia this
this hace referencia al propio objeto y sirve para resolver conflictos de nombres entre parámetros y propiedades:
public void establecerPotencia(int potencia) {
if (potencia > 0)
this.potencia = potencia;
}
Sobrecarga de métodos
Reglas para sobrecargar métodos:
- Mismo nombre y tipo de retorno.
- Se distinguen por número y/o tipo de parámetros.
- La visibilidad no sirve para distinguirlos.

El modificador static
Las propiedades y métodos static pertenecen a la clase, no a los objetos individuales. Son compartidos por todas las instancias:
public class Bombilla {
private static int consumoTotal = 0;
public static int getConsumoTotalBombillas() {
return consumoTotal;
}
}
Se accede a través del nombre de la clase:
System.out.println(Bombilla.getConsumoTotalBombillas() + "W");
La clase Math de la librería estándar y System.out.println son ejemplos habituales de uso de métodos estáticos.
Concepto y notación UML de paquetes
Los paquetes agrupan clases relacionadas. Por ejemplo, un paquete electrodomesticos podría contener las clases Bombilla, Televisor, Video y MandoUniversal.

Declaración de un paquete
La declaración de paquete debe ser la primera línea del fichero:
package nombreDelPaquete;
Reglas de nombrado:
- Minúsculas, sin espacios.
- Comenzar con letra,
$o_. - No pueden ser palabras reservadas.
- Paquetes anidados separados por puntos.
Ejemplos correctos: utilidades, gestionClientes, utilidades.graficos, utilidades.sonidos
Ejemplos incorrectos: 12meses, static, future-soft, double.number
El espacio de nombres
Los paquetes evitan conflictos de nombres: dos clases pueden tener el mismo nombre si pertenecen a paquetes distintos.
La convención de nombres usa el dominio inverso de la empresa:
www.endesa.com→com.endesa.servicios,com.endesa.facturacionwww.sadiel.es→es.sadiel.servicios,es.sadiel.facturacion
La estructura de carpetas asociada
Hay una relación directa entre paquetes y carpetas: cada paquete corresponde a una carpeta, y cada clase a un fichero .java.

Clases visibles dentro y fuera de un paquete
Las clases declaradas con public son visibles dentro y fuera del paquete. Sin modificador de acceso, solo son visibles dentro del paquete.
Visibilidad amigable o de paquete: Sin public ni private:
int codigoCliente;
boolean propietario;
void imprimeCliente() { … }
En UML se denota sin símbolo de visibilidad.

Sentencias de importación
Para usar clases de otros paquetes se usa import:
import utilidades.Teclado;
import utilidades.graficos.*;
Eclipse puede conectarse con la documentación estándar de Java para ofrecer información contextual durante el desarrollo.