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

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

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

    get type() {
        return this.#type;
    }
    // quitamos el método canFly
}

/*
    Generamos una clase PokemonFly la cual
    contara con el método cnFly que tenia la 
    clase Pokemon
*/
class PokemonFly extends Pokemon {
    // Creamos el metodo principal
    constructor(name, type) {
        // Invocamos al constructor de la clase pokémon
        super(name, type);
    }
    /*
        Agregamos un metodo el cual define la habiliad 
        de volar.
    */
    get canFly() {
        return "Puedo volar";
    }
}

/*
    Creamos una clase Charmander la cual hereda de 
    la clase Pokemon y en esta ocacion no es necesario
    mandar una exepción ya que no tiene el método canFly  
*/
class Charmander extends Pokemon {
    // Creamos el metodo principal
    constructor() {
        // Invocamos al constructor de la clase pokémon
        super("Charmander", "Fire");
    }
}

/*
    Creamos una clase Charizar la cual hereda de 
    la clase PkemonFly ya que charizar si utiliza
    el método canFly
*/
class Charizar extends PokemonFly {
    // Creamos el metodo principal
    constructor() {
        // Invocamos al constructor de la clase pokémon
        super("Charizar", "Fire");
    }
}

// Creamos la instancia de la clase Charizar
const CHARIZAR = new Charizar();
/*
    Como se comento con anterioridad charizar puede 
    utilizar todos los métodos de la clase Pokemon.    
*/
console.log(`Hola soy ${CHARIZAR.name}`);
console.log(`Soy de tipo ${CHARIZAR.type}`);
console.log(`Ademas ${CHARIZAR.canFly}`);

// Creamos la instancia de la clase Charmander
const CHARMANDER = new Charmander();
/*
    Como se comento con anterioridad charmander no puede 
    utilizar todos los métodos de la clase Pokemon.    
*/
console.log(`Hola soy ${CHARMANDER.name}`);
console.log(`Soy de tipo ${CHARMANDER.type}`);
console.log(`Ademas ${CHARMANDER.canFly}`);
// En esta caso la salida nos mostrara undedined
// ya que el método no exite en la clase Charmander