这是我参与「第五届青训营 」笔记创作活动的第9天
接着上次的说,我们今天来学点高级的,继承
2.2.2 继承
类继承的两种方式(js中只有extends,implement是ts提供的)
- 通过
extends实现 子类继承父类 - 通过
implement完成 一个类实现一个接口
通过extends
class Animal{
move(){
console.log("animal move");
}
}
class Dog extends Animal{//Dog类继承Animal类
bark(){
console.log("汪汪汪");
}
}
const dog = new Dog();
子类Dog继承父类Animal,则Dog的实例对象dog就同时具有了父类Animal和子类Dog的所有属性和方法
通过implement
interface Singable{
sing():void
}
class Person implement Singable{
sing(){
console.log("123");
}
}
Person类要实现接口Singable,就意味着Person类中必须提供Singable接口中指定的所有方法和属性,否则编译器会报错
2.2.3 类成员可见性
可以使用TypeScript来控制class的方法或属性对于class外的代码是否可见。
可见性修饰符包括:
- public(公有的)
- protected(受保护的)
- private(私有的)
public表示公有的、公开的,公有成员可以被任何地方访问,默认可见性。
class Animal {
public move() {
console. log('Moving along!');
}
}
- 在类属性或方法前面添加public关键字,来修饰该属性或方法是共有的。
- 因为public是默认可见性,所以,可以直接省略不写。
protected表示受保护的,仅对其声明所在类和子类中(非实例对象)可见。
class Animal {
protected move() {
console. log('Moving along!')
}
class Dog extends Animal {
bark() {
console.log('汪!')
this.move()
}
- 在类属性或方法前面添加protected关键字,来修饰该属性或方法是受保护的。
- 在子类的方法内部可以通过this来访问父类中受保护的成员,但是,对实例不可见!
可以看到,无论是实例对象a或者b,都不能访问protected修饰的属性或者方法
private表示私有的,只在当前类中可见,对实例对象以及子类也是不可见的。
class Animal {
private move() {
console. log('Moving along!');
}
walk() {
this.move();
}
}
- 在类属性或方法前面添加private关键字,来修饰该属性或方法是私有的。
- 私有的属性或方法只在当前类中可见,对子类和实例对象也都是不可见的!
除了可见性修饰符之外,还有一个常见修饰符就是readonly(只读修饰符)
readonly表示只读,用来防止在构造函数之外对属性进行赋值。
- 使用readonly关键字修饰该属性是只读的,注意只能修饰属性不能修饰方法。
- 属性age后面的类型注解(比如,此处的number)如果不加,则age的类型为18(字面量类型)。
- 接口或者{表示的对象类型,也可以使用readonly。