从零学TypeScript-04 | 青训营笔记

81 阅读2分钟

这是我参与「第五届青训营 」笔记创作活动的第9天

接着上次的说,我们今天来学点高级的,继承

2.2.2 继承

类继承的两种方式(js中只有extends,implement是ts提供的)

  1. 通过extends实现 子类继承父类
  2. 通过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外的代码是否可见。

可见性修饰符包括:

  1. public(公有的)
  2. protected(受保护的)
  3. private(私有的)

public表示公有的、公开的,公有成员可以被任何地方访问,默认可见性。

class Animal {
    public move() {
    console. log('Moving along!');
    }
}
  1. 在类属性或方法前面添加public关键字,来修饰该属性或方法是共有的。
  2. 因为public是默认可见性,所以,可以直接省略不写。

protected表示受保护的,仅对其声明所在类和子类中(非实例对象)可见。

class Animal {
protected move() { 
    console. log('Moving along!') 
}
class Dog extends Animal {
bark() {
console.log('汪!')
this.move()
}
  1. 在类属性或方法前面添加protected关键字,来修饰该属性或方法是受保护的。
  2. 在子类的方法内部可以通过this来访问父类中受保护的成员,但是,对实例不可见!

image.png 可以看到,无论是实例对象a或者b,都不能访问protected修饰的属性或者方法

private表示私有的,只在当前类中可见,对实例对象以及子类也是不可见的。

class Animal {
    private move() { 
        console. log('Moving along!');
    }
    walk() {
        this.move();
    }
}
  1. 在类属性或方法前面添加private关键字,来修饰该属性或方法是私有的。
  2. 私有的属性或方法只在当前类中可见,对子类和实例对象也都是不可见的!

image.png

除了可见性修饰符之外,还有一个常见修饰符就是readonly(只读修饰符)

readonly表示只读,用来防止在构造函数之外对属性进行赋值。

image.png

  1. 使用readonly关键字修饰该属性是只读的,注意只能修饰属性不能修饰方法。
  2. 属性age后面的类型注解(比如,此处的number)如果不加,则age的类型为18(字面量类型)。
  3. 接口或者{表示的对象类型,也可以使用readonly。

image.png