Gyakorlat – Osztály kiterjesztése

Befejeződött

Ebben a gyakorlatban kiterjeszti az Car osztályt egy új, metódusnak nevezett osztály létrehozásához ElectricCar és felülbírálásához.

  1. Folytassa a munkát a játszótéren.

  2. Car Az osztály alatt hozzon létre egy ilyen nevű ElectricCarextends Carúj osztályt.

    class ElectricCar extends Car {
        // Properties unique to ElectricCar
    
        // Constructor
    
        // Accessors
    
        // Methods
    
    }
    
  3. Deklarálja az osztály egyedi ElectricCar tulajdonságát típustulajdonságként privatenumber. _range

    // Properties
    private _range: number;
    
  4. Az constructor alosztály esetében néhány módon eltér az constructor alaposztálytól.

    • A paraméterlista az alaposztály és az alosztály bármelyik tulajdonságát is tartalmazhatja. (A TypeScript összes paraméterlistához hasonlóan ne feledje, hogy a kötelező paramétereknek meg kell jelenniük a választható paraméterek előtt.)
    • A törzsben constructorhozzá kell adnia a kulcsszót az super() alaposztály paramétereinek belefoglalásához. A super kulcsszó futtatáskor végrehajtja az constructor alaposztályt.
    • A super kulcsszónak az alosztályban lévő tulajdonságokra való this. hivatkozás előtt kell megjelennie.
  5. Adja meg az alaposztály és az alosztály _range tulajdonságának osztályát ElectricCarconstructor és tulajdonságait._make_color_doors Ebben constructora paraméter alapértelmezett értékét állítsa be a doors következőre 2: .

    // Constructor
    constructor(make: string, color: string, range: number, doors = 2) {
        super(make, color, doors);
        this._range = range;
    }
    
  6. Adja meg a get paraméterhez tartozó tartozékokat és set tartozékokat range .

    // Accessors
    get range() {
        return this._range;
    }
    set range(range) {
        this._range = range;
    }
    
  7. Adja meg a következő charge metódust, amely egy üzenetet ad vissza a konzolnak. Ez a metódus meghívja az worker osztályban definiált függvényt Car . Ez azonban azt a hibát eredményezi, hogy a "worker" tulajdonság privát, és csak az "Autó" osztályon belül érhető el. Tudja, hogyan háríthatja el ezt a problémát?

    // Methods
    charge() {
        console.log(this.worker() + " is charging.")
    }
    
  8. Car Az osztályban módosítsa a függvény hozzáférési módosítóját a worker következőre privateprotected: . Ez lehetővé teszi, hogy az Car osztály alosztályai használják a függvényt, miközben elrejtik az osztályból példányosított objektumok számára elérhető tagok elől. A metódus hibájának charge most meg kell szűnnie.

  9. Tesztelje az új ElectricCar osztályt, és ellenőrizze, hogy a várt módon működik-e.

    let spark = new ElectricCar('Spark Motors','silver', 124, 2);
    let eCar = new ElectricCar('Electric Car Co.', 'black', 263);
    console.log(eCar.doors);         // returns the default, 2
    spark.charge();                  // returns "Spark Motors is charging"
    
  10. Adjon meg egy új brake metódust az ElectricCar osztályban, amely különböző megvalósítási részletekkel rendelkezik. Vegye figyelembe, hogy a metódus paraméter-aláírásának és visszatérési brake típusának meg kell egyeznie az brakeCar osztály metódusával.

    // Overrides the brake method of the Car class
    brake(): string {
        return `${this.worker()}  is braking with the regenerative braking system.`
    }
    
  11. Tesztelje az új metódust, és ellenőrizze, hogy a várt módon működik-e.

    console.log(spark.brake());  // returns "Spark Motors is braking with the regenerative braking system"