class Pokemon {
    #name = "";
    #type = "";

    constructor(name, type) {
        this.#name = name;
        this.#type = type;
    }

    get name() {
        return this.#name;
    }

    get type() {
        return this.#type;
    }
    /*
        Agregamos dós nuuevos métodos
        los caules establecen habilidadess que 
        puede tener un pokemon.
    */
    get canFly() {
        return "Puedo volar";
    }

    get canSwim() {
        return "Puedo Nadar";
    }
}


/*
    Creamos las clasee Charizar que 
    hereda de la clase Pokemoon por lo
    cual tomara todos los métodos.
*/
class Charizar extends Pokemon {
    constructor() {
        super("Charizar", "Fire");
    }

    // En este caso Charizar puede volar
    get canFly() {
        return `Soy ${this.name} y puedo volar`;
    }

    // 
    get canSwim() {
        return `No puedo nadar por que soy de tipo ${this.type}`;
    }
}

/*
    Creamos las clasee Charizar que 
    hereda de la clase Pokemoon por lo
    cual tomara todos los métodos.
*/
class Blastoise extends Pokemon {
    constructor() {
        super("Blastoise", "Water");
    }

    get canFly() {
        return `No puedo volar por que soy de tipo ${this.type}`;
    }

    get canSwim() {
        return `Soy ${this.name} y puedo nadar`;
    }
}

const CHARIZAR = new Charizar();
console.log(CHARIZAR.canFly);
console.log(CHARIZAR.canSwim);
/*
    output
    Soy Charizar y puedo volar
    No puedo nadar por que soy de tipo Fire
*/

const BLASTOISE = new Blastoise();
console.log(BLASTOISE.canFly);
console.log(BLASTOISE.canSwim);
/*
    output
    No puedo volar por que soy de tipo Water
    Soy Blastoise y puedo nadar
*/