Herencia
En TypeScript no existe la herencia múltiple.
TypeScript
// Herencia
class Animal {
name: string;
constructor(theName: string) { this.name = theName; }
move(distanceInMeters: number = 0) {
console.log(`${this.name} moved ${distanceInMeters}m.`);
}
}
class Snake extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 5) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
class Rhino extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 10) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
class Elephant extends Animal {
constructor(name: string) { super(name); }
move(distanceInMeters = 20) {
console.log("Slithering...");
super.move(distanceInMeters);
}
}
// Para poder Crear un array con este typo de objetos tenemos que utilizar la clase Padre Ej:
let array : Animal[] = [ new Rhino('Rinocerator'), new Snake("Serpentina"), new Elephant("Elefanton") ];
// El acceso a este ejemplo sería muchisimo más sencillo
let ej2 = {Rhino: new Rhino('Rinocerator'), Snake: new Snake("Serpentina"), Elephant: new Elephant("Elefanton")};
console.log(array);
Javascript
super
En las clases hijas hace referencia a la clase padre, tenemos que tener en cuenta que super
solo deberá ser utilizado cuando no haya de por medio fat arrows o funciones de flecha, ya que en ese caso debería utilizarse la palabra reservada this
veamos unos ejemplos:
Super sin fat arrow
class Base {
log() { console.log('hello world'); }
}
class Child extends Base {
log() { super.log() };
}
This con fat arrow
class Base {
// realizamos una función mediante el uso de fat arrow
log = () => { console.log('hello world'); }
}
class Child extends Base {
logWorld() { this.log() };
}
Si intentamos utilizar super en esta situación el compilador nos dará un error. que nos dirá que solo métodos public
o protected
son accesibles con la palabra reservada super