Extends用于定义新的子类,子类包括父类的所有属性和方法。
class Animal {
move() {
console.log("Move");
}
}
class Dog extends Animal {
woof(times: number) {
for (let i = 0; i < times; i++) {
console.log("woof!");
}
}
}
const dog: Dog = new Dog();
dog.move();
dog.woof(5);
子类可以不仅可以调用自己的woof()方法,也可以调用父类的move()方法。
运行结果如下:
子类可以重写父类的方法,可以适当改变签名,但是方法签名必须是兼容父类的。
class Animal {
move() {
console.log("Move!");
}
}
class Dog extends Animal {
move(steps: number) {
console.log(`Move ${steps} steps!`);
}
}
const dog: Dog = new
dog.move(5);像这样,改变父类的方法声明是不对的。
但是把steps定义为可选参数,就可以保持和父类定义的兼容。
class Animal {
move() {
console.log("Move!");
}
}
class Dog extends Animal {
move(steps?: number) {
if(steps) {
console.log(`Move ${steps} steps!`);
} else {
super.move();
}
}
}
const dog: Dog = new Dog();
dog.move(5);
dog.move();
运行结果如下:
当然作为一个子类,同样也能赋值给父类类型的变量。
在调用被重写的函数时,就算当前类型时父类类型,一样可以调用子类的方法。
class Animal {
move() {
console.log("Move!");
}
}
class Dog extends Animal {
move(steps?: number) {
console.log("Dog move() method is called");
if(steps) {
console.log(`Move ${steps} steps!`);
} else {
super.move();
}
}
}
const dog: Animal = new Dog();
dog.move();
运行结果如下:
| 留言与评论(共有 0 条评论) “” |