DevPath · Aprende a programar ESPTEN

Programación orientada a objetos

Herencia y encapsulación

Herencia: extends y super

Una clase puede heredar de otra para reutilizar y especializar su comportamiento, usando extends:

class Animal {
  constructor(nombre) {
    this.nombre = nombre;
  }
  describir() {
    return `${this.nombre} hace un sonido`;
  }
}

class Perro extends Animal {
  describir() {
    return `${this.nombre} ladra`;
  }
}

Si la subclase tiene su propio constructor, debe llamar a super(...) para inicializar la parte heredada:

class Gato extends Animal {
  constructor(nombre, color) {
    super(nombre);   // ejecuta el constructor de Animal
    this.color = color;
  }
}

super.metodo() también permite llamar a un método de la clase padre.

Encapsulación: campos privados

Por defecto, todas las propiedades son accesibles desde fuera. Para datos que no deben tocarse directamente, usa campos privados con #:

class CuentaBancaria {
  #saldo = 0;
  ingresar(cantidad) {
    this.#saldo += cantidad;
  }
  get saldo() {        // getter: se lee como una propiedad
    return this.#saldo;
  }
}
const c = new CuentaBancaria();
c.ingresar(100);
console.log(c.saldo); // 100  (c.#saldo daría error)

Getters y setters

Permiten ejecutar lógica al leer (get) o asignar (set) una propiedad, manteniendo una sintaxis sencilla:

class Temperatura {
  #celsius = 0;
  get fahrenheit() {
    return this.#celsius * 9 / 5 + 32;
  }
  set fahrenheit(f) {
    this.#celsius = (f - 32) * 5 / 9;
  }
}

Ejemplos

Herencia con super y un getter

class Vehiculo {
  constructor(marca) {
    this.marca = marca;
  }
  describir() {
    return "Vehículo " + this.marca;
  }
}
class Coche extends Vehiculo {
  constructor(marca, puertas) {
    super(marca);
    this.puertas = puertas;
  }
  describir() {
    return super.describir() + " con " + this.puertas + " puertas";
  }
}
console.log(new Coche("Seat", 5).describir());
Pon esto en práctica

DevPath es un curso práctico: aquí lees la teoría; en la app la pones en práctica con ejercicios que se ejecutan de verdad, sin conexión.

Empezar gratis en la app →
← Clases, constructor y métodosthis dinámico: bind, call y apply →