Apariencia
📘 Clase 7 — Modificadores de acceso (public, protected, private)
TypeScript · 2026-07-12 · Carpeta:
02-Ejercicios/Tipos_clase⬅️ Volver al índice de clases
🎯 Qué aprendí
- Qué son los modificadores de acceso en una clase.
- Cuándo usar
public,protectedyprivate. - Cómo estos modificadores ayudan al encapsulamiento.
- Qué miembros se pueden usar desde fuera de la clase y cuáles no.
- Cómo documentar mejor la intención de una clase con niveles de acceso.
📖 PARTE TEÓRICA
🧱 1. ¿Qué son los modificadores de acceso?
Los modificadores de acceso son palabras clave que indican desde dónde se puede usar una propiedad o un método de una clase.
En TypeScript, los tres principales son:
publicprotectedprivate
Sirven para aplicar uno de los pilares de la POO: el encapsulamiento, es decir, agrupar datos y comportamientos relacionados y controlar qué se expone y qué se protege.
🌍 2. public: accesible desde cualquier parte
Un miembro public puede usarse dentro de la clase y también desde fuera.
typescript
class Persona {
public name: string;
constructor(name: string) {
this.name = name;
}
}
const persona = new Persona("Styp");
console.log(persona.name); // ✅ permitido💡
publices lo que forma parte de la "cara visible" de la clase.
🛡️ 3. protected: visible dentro de la clase
Un miembro protected no se puede usar desde fuera con una instancia normal. Su idea es que quede disponible dentro de la clase y reservado para casos más avanzados que veremos después.
typescript
class Persona {
protected age: number;
constructor(age: number) {
this.age = age;
}
}
const persona = new Persona(30);
// console.log(persona.age); // ❌ no permitido📝 Por ahora, quédate con esta idea:
protectedno es público, pero tampoco es tan cerrado comoprivate. Se usa cuando algo no debe exponerse hacia afuera.
🔒 4. private: solo dentro de la clase
Un miembro private solo existe para la lógica interna de esa clase.
typescript
class Persona {
private isDeveloper: boolean;
constructor(isDeveloper: boolean) {
this.isDeveloper = isDeveloper;
}
}
const persona = new Persona(true);
// console.log(persona.isDeveloper); // ❌ no permitido💡 Usa
privatecuando un dato o comportamiento sea estrictamente interno y no quieras que nadie lo toque desde fuera.
⚖️ 5. Diferencia entre public, protected y private
| Modificador | ¿Se puede usar fuera de la clase? | Uso típico |
|---|---|---|
public | ✅ Sí | Datos y métodos que quieres exponer |
protected | ❌ No | Mecánicas internas que no deben verse afuera |
private | ❌ No | Datos y lógica totalmente interna |
👤 6. La clase real trabajada en este tema
Este fue el ejemplo base verificado:
typescript
export class Persona {
public name: string;
protected age: number;
private isDeveloper: boolean;
constructor(name: string, age: number, isDeveloper: boolean) {
this.name = name;
this.age = age;
this.isDeveloper = isDeveloper;
}
public saludar(): string {
return `Hola, mi nombre es ${this.name}, tengo ${this.age} años`;
}
protected obtenerEdad(): number {
return this.age;
}
private esDesarrollador(): boolean {
return this.isDeveloper;
}
}Lo importante:
namees público y sí puede verse desde fuera.ageestá protegido y no puede consultarse desde una instancia normal.isDeveloperes privado y queda encerrado dentro de la clase.saludar()sí puede ejecutarse desde fuera porque espublic.
🧠 7. ¿Cómo afectan estos modificadores a la visibilidad?
En el archivo de implementación:
typescript
import { Persona } from "./clase.js";
let persona = new Persona("Styp", 30, true);
console.log(persona.saludar());Esto sí funciona porque saludar() es público.
Pero estas líneas fallarían:
typescript
// console.log(persona.age); // ❌ protected
// console.log(persona.obtenerEdad()); // ❌ protected
// console.log(persona.isDeveloper); // ❌ private
// console.log(persona.esDesarrollador()); // ❌ private🧪 En el autocompletado del editor, cuando escribes
persona., normalmente solo verás los miembros públicos disponibles.
🧷 8. ¿Por qué son importantes?
Los modificadores de acceso ayudan a:
- proteger datos sensibles
- evitar uso incorrecto desde fuera
- dejar claro qué forma parte de la API pública
- mantener código más ordenado y más fácil de evolucionar
Una buena regla mental es:
- empieza con lo más cerrado
- expón solo lo necesario
💡 En la práctica: si algo no necesitas mostrar afuera, no lo hagas público por defecto.
🧭 9. ¿Cuándo usar private y cuándo protected?
Usa private cuando el dato o método sea exclusivo de esa clase y absolutamente nadie más deba tocarlo. Es como un diario personal con candado.
Usa protected cuando quieras reservar una pieza interna y no exponerla al mundo exterior. Por ahora puedes pensarlo como un nivel intermedio: no es visible fuera, pero tampoco es tan cerrado como private.
📝 En esta clase no trabajamos herencia todavía. Aquí el foco es entender la diferencia de visibilidad y el encapsulamiento.
💻 PARTE PRÁCTICA
Archivos trabajados:
02-Ejercicios/Tipos_clase/clase.ts02-Ejercicios/Tipos_clase/implementacion.ts
bash
cd 02-Ejercicios/Tipos_clase
tsc && node implementacion.jsCódigo verificado:
- la clase
Personadefine miembrospublic,protectedyprivate implementacion.tsimporta la clase con./clase.js- se crea una instancia y se llama al método público
saludar()
Salida real:
text
Hola, mi nombre es Styp, tengo 30 añosTodo verificado y corriendo. ✅
🏋️ EJERCICIOS CON SOLUCIÓN
Ejercicio 1 — Propiedad pública
Crea una clase Usuario con una propiedad pública nombre y un método público saludar(). Luego crea una instancia e imprime el nombre y el saludo.
Ver solución
typescript
class Usuario {
public nombre: string;
constructor(nombre: string) {
this.nombre = nombre;
}
public saludar(): string {
return `Hola, soy ${this.nombre}`;
}
}
let usuario = new Usuario("Ana");
console.log(usuario.nombre);
console.log(usuario.saludar());Terminal esperada:
$ tsc usuario.ts
$ node usuario.js
Ana
Hola, soy AnaEjercicio 2 — Miembro privado
Crea una clase Cuenta con una propiedad privada saldo y un método público verSaldo(). No intentes imprimir saldo directamente; hazlo a través del método.
Ver solución
typescript
class Cuenta {
private saldo: number;
constructor(saldo: number) {
this.saldo = saldo;
}
public verSaldo(): string {
return `Saldo actual: ${this.saldo}`;
}
}
let cuenta = new Cuenta(500);
console.log(cuenta.verSaldo());
// console.log(cuenta.saldo);
// ❌ Error: Property 'saldo' is private.Terminal esperada:
$ tsc cuenta.ts
$ node cuenta.js
Saldo actual: 500Ejercicio 3 — Método protegido
Crea una clase Perfil con una propiedad pública nombre y un método protegido obtenerMensajeInterno(). Agrega un método público mostrarMensaje() que use internamente el método protegido.
Ver solución
typescript
class Perfil {
public nombre: string;
constructor(nombre: string) {
this.nombre = nombre;
}
protected obtenerMensajeInterno(): string {
return `Mensaje interno para ${this.nombre}`;
}
public mostrarMensaje(): string {
return this.obtenerMensajeInterno();
}
}
let perfil = new Perfil("Luis");
console.log(perfil.mostrarMensaje());
// console.log(perfil.obtenerMensajeInterno());
// ❌ Error: Property 'obtenerMensajeInterno' is protected.Terminal esperada:
$ tsc perfil.ts
$ node perfil.js
Mensaje interno para LuisEjercicio 4 — Comparar visibilidades
Crea una clase PersonaSegura con:
public nombreprotected edadprivate activo
Agrega un método público resumen() que imprima los tres datos.
Ver solución
typescript
class PersonaSegura {
public nombre: string;
protected edad: number;
private activo: boolean;
constructor(nombre: string, edad: number, activo: boolean) {
this.nombre = nombre;
this.edad = edad;
this.activo = activo;
}
public resumen(): string {
return `Nombre: ${this.nombre}, Edad: ${this.edad}, Activo: ${this.activo}`;
}
}
let persona = new PersonaSegura("Carlos", 28, true);
console.log(persona.resumen());
console.log(persona.nombre);
// console.log(persona.edad);
// console.log(persona.activo);Terminal esperada:
$ tsc personaSegura.ts
$ node personaSegura.js
Nombre: Carlos, Edad: 28, Activo: true
Carlos🧭 ¿Para qué sirven estos modificadores?
Se usan para controlar qué partes de una clase deben verse desde fuera y cuáles deben quedar protegidas.
publicpara lo que sí quieres exponerprotectedpara mecánicas internas no visibles externamenteprivatepara datos y lógica completamente internos
💡 En resumen: los modificadores de acceso hacen tus clases más claras, seguras y ordenadas.
❓ Preguntas y respuestas (autoevaluación)
1. ¿Qué hace public?
Permite acceder a la propiedad o método desde cualquier parte del código.
2. ¿Qué hace private?
Restringe el acceso solo al interior de la clase donde fue definido.
3. ¿Qué hace protected en esta etapa del curso?
Marca un miembro como no visible desde fuera de la clase; es un nivel intermedio de acceso.
4. ¿Por qué usar modificadores de acceso?
Para controlar visibilidad, proteger datos y hacer más claro el diseño de la clase.
5. ¿Qué significa encapsulamiento?
Agrupar datos y métodos relacionados en una clase y controlar cómo se accede a ellos.
📎 Apuntes relacionados
➡️ Siguiente
Herencia y extends para reutilizar comportamiento entre clases.