Ejercicio: Ampliación de una clase
En este ejercicio, ampliará la clase Car
para crear una nueva clase denominada ElectricCar
e invalidar un método.
Continúe trabajando en el área de juegos.
Debajo de la clase
Car
, cree una nueva clase denominadaElectricCar
que apliqueextends Car
.class ElectricCar extends Car { // Properties unique to ElectricCar // Constructor // Accessors // Methods }
Declare la propiedad que es única para la clase
ElectricCar
,_range
, como una propiedadprivate
de tiponumber
.// Properties private _range: number;
El elemento
constructor
de la subclase es diferente del elementoconstructor
de la clase base de varias maneras.- La lista de parámetros puede incluir cualquiera de las propiedades de la clase base y la subclase. (Al igual que con todas las listas de parámetros en TypeScript, recuerde que los parámetros obligatorios deben aparecer antes de los opcionales).
- En el cuerpo de
constructor
, debe agregar la palabra clavesuper()
para incluir los parámetros de la clase base. La palabra clavesuper
ejecuta el elementoconstructor
de la clase base cuando se ejecuta. - La palabra clave
super
debe aparecer antes de cualquier referencia athis.
cuando se refiera a las propiedades de la subclase.
Defina la clase
constructor
paraElectricCar
, incluidas las propiedades_make
,_color
y_doors
de la clase base y la propiedad_range
de la subclase. En este elementoconstructor
, establezca el valor predeterminado del parámetrodoors
a2
.// Constructor constructor(make: string, color: string, range: number, doors = 2) { super(make, color, doors); this._range = range; }
Defina los descriptores de acceso
get
yset
para el parámetrorange
.// Accessors get range() { return this._range; } set range(range) { this._range = range; }
Escriba el siguiente método
charge
que devuelve un mensaje a la consola. Este método incluye una llamada a la funciónworker
que definió en la claseCar
. Pero genera el error La propiedad "worker" es privada y solo es accesible dentro de la clase "Car". ¿Sabe cómo solucionar este problema?// Methods charge() { console.log(this.worker() + " is charging.") }
En la clase
Car
, cambie el modificador de acceso de la funciónworker
deprivate
aprotected
. Esto permite a las subclases de la claseCar
utilizar la función, mientras que la mantienen oculta de los miembros disponibles para los objetos de los que se ha creado una instancia desde la clase. Ya debería estar resuelto el error del métodocharge
.Pruebe la nueva clase
ElectricCar
para comprobar que funciona según lo previsto.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"
Defina un nuevo método
brake
en la claseElectricCar
que tenga detalles de implementación diferentes. Tenga en cuenta que la firma del parámetro y el tipo de valor devuelto del métodobrake
deben ser los mismos que los del métodobrake
de la claseCar
.// Overrides the brake method of the Car class brake(): string { return `${this.worker()} is braking with the regenerative braking system.` }
Pruebe el nuevo método y compruebe que funciona según lo previsto.
console.log(spark.brake()); // returns "Spark Motors is braking with the regenerative braking system"