Inheritance
In TypeScript, we can use common object-oriented patterns. Of course, one of the most fundamental patterns in class-based programming is being able to extend existing classes to create new ones using inheritance.
Let’s take a look at an example:
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 Horse extends Animal { constructor(name: string) { super(name); } move(distanceInMeters = 45) { console.log("Galloping..."); super.move(distanceInMeters); } } let sam = new Snake("Sammy the Python"); let tom: Animal = new Horse("Tommy the Palomino"); sam.move(); tom.move(34);
This example covers quite a few of the inheritance features in TypeScript that are common to other languages. Here we see the extends
keywords used to create a subclass. You can see this where Horse
and Snake
subclass the base class Animal
and gain access to its features.
Derived classes that contain constructor functions must call super()
which will execute the constructor function on the base class.
The example also shows how to override methods in the base class with methods that are specialized for the subclass. Here both Snake
and Horse
create a move
method that overrides the move
from Animal
, giving it functionality specific to each class. Note that even though tom
is declared as an Animal
, since its value is a Horse
, when tom.move(34)
calls the overriding method in Horse
:
Slithering... Sammy the Python moved 5m. Galloping... Tommy the Palomino moved 34m.
Please login to continue.