🧬 EJERCICIO #3 — EL MURO DE LA
HERENCIA (Java POO Avanzado)
Este ejercicio separa al que “sabe hacer clases” del que entiende el modelo de objetos.
Aquí se evalúan tres cosas duras: herencia, polimorfismo y abstracción.
🧠 Mentalidad correcta:
Esto no va de copiar código. Va de pensar en jerarquías reales.
📐 DIAGRAMA UML — HERENCIA
Formato ASCII :
┌────────────────────────┐
│ Empleado │
├────────────────────────┤
│ # nombre : String │
│ # salarioBase : double │
├────────────────────────┤
│ + Empleado(n:String, │
│ s:double) │
│ + calcularSalario(): │
│ double (abstract) │
└───────────▲────────────┘
│
┌─────────────────┴──────────────┐
│ │
┌────────────────────────┐ ┌────────────────────────┐
│ Programador │ │ Gerente │
├────────────────────────┤ ├────────────────────────┤
│ - bonus : double │ │ - incentivo : double │
├────────────────────────┤ ├────────────────────────┤
│ + Programador(...) │ │ + Gerente(...) │
│ + calcularSalario() │ │ + calcularSalario() │
└────────────────────────┘ └────────────────────────┘
, 👉 # = protected
👉 Flecha = extends
🧠 CONCEPTO CLAVE — ¿Por qué
protected y no private ?
En una clase padre:
protected String nombre;
protected double salarioBase;
Si fueran private , las clases hijas no podrían acceder directamente.
Aquí queremos que Programador y Gerente reutilicen datos del padre.
👉 private = solo la clase.
👉 protected = clase + hijas.
🧠 Corrector lo ve como:
Encapsulación con herencia real.
📄 Empleado.java (CLASE ABSTRACTA)
public abstract class Empleado {
protected String nombre;
protected double salarioBase;
public Empleado(String nombre, double salarioBase) {
this.nombre = nombre;
HERENCIA (Java POO Avanzado)
Este ejercicio separa al que “sabe hacer clases” del que entiende el modelo de objetos.
Aquí se evalúan tres cosas duras: herencia, polimorfismo y abstracción.
🧠 Mentalidad correcta:
Esto no va de copiar código. Va de pensar en jerarquías reales.
📐 DIAGRAMA UML — HERENCIA
Formato ASCII :
┌────────────────────────┐
│ Empleado │
├────────────────────────┤
│ # nombre : String │
│ # salarioBase : double │
├────────────────────────┤
│ + Empleado(n:String, │
│ s:double) │
│ + calcularSalario(): │
│ double (abstract) │
└───────────▲────────────┘
│
┌─────────────────┴──────────────┐
│ │
┌────────────────────────┐ ┌────────────────────────┐
│ Programador │ │ Gerente │
├────────────────────────┤ ├────────────────────────┤
│ - bonus : double │ │ - incentivo : double │
├────────────────────────┤ ├────────────────────────┤
│ + Programador(...) │ │ + Gerente(...) │
│ + calcularSalario() │ │ + calcularSalario() │
└────────────────────────┘ └────────────────────────┘
, 👉 # = protected
👉 Flecha = extends
🧠 CONCEPTO CLAVE — ¿Por qué
protected y no private ?
En una clase padre:
protected String nombre;
protected double salarioBase;
Si fueran private , las clases hijas no podrían acceder directamente.
Aquí queremos que Programador y Gerente reutilicen datos del padre.
👉 private = solo la clase.
👉 protected = clase + hijas.
🧠 Corrector lo ve como:
Encapsulación con herencia real.
📄 Empleado.java (CLASE ABSTRACTA)
public abstract class Empleado {
protected String nombre;
protected double salarioBase;
public Empleado(String nombre, double salarioBase) {
this.nombre = nombre;