TypeScript实例讲解(十三)

311 阅读2分钟

这是我参与11月更文挑战的第13天,活动详情查看:2021最后一次更文挑战

接上一篇:TypeScript实例讲解(十二)

本篇内容:抽象类。

抽象类

前面我们已经了解了类的概念,如果多个类有共性,我们就可以定义一个抽象类把共性定义出来。抽象类通过 abstract 关键字修饰。注意:抽象类只能作为其他类的基类使用,可以被继承,不能被实例化。

从面向对象的角度,世间万物都可以用类来定义。图形中的正方形可以定义为一个类;圆形可以定义为一个类;三角形可以定义为一个类;图形本身也可以定义为一个类...

// 例 1
// Square类
class Square {
    getName () {
        // todo
    }
}
// Circular类
class Circular {
    getName () {
        // todo
    }
}
// Triangle类
class Triangle {
    getName () {
        // todo
    }
}

例1中的正方形(Square)、圆形(Circular)、三角形(Triangle)这几种图形的类有很多共同的东西,比如它们都有一个获取名称的方法 getName()。因此我们可以定义一个抽象类把这些通性的东西抽离出来。

// 例 2
abstract class Graphical {
    getName() {
        // todo
    } 
}

例2中定义了一个抽象类 Graphical,类中还实现了一个 getName() 方法。
例1中的三种图形它们应该都有一个获取面积的方法 getArea()。但是该方法的具体实现是不一样的。

抽象方法

// 例 3
abstract class Graphical {
    getName() {
        // todo
    }
    abstract getArea (): number;
}

例3中定义了一个抽象方法 getArea()。类的方法用 abstract 修饰则表示这是一个抽象方法,这个方法的实现也是抽象的。

// 例 4
new Graphical();  // 错误示范

注意:
1、抽象类可以被继承,不能被实例化。
2、一个类只能继承一个抽象类。
3、一旦有了抽象方法,就一定要把这个类声明为抽象类。

// 例 5
// Square类
class Square extends Graphical {
    getArea () {
        // todo
    }
}
// Circular类
class Circular extends Graphical {
    getArea () {
        // todo
    }
}
// Triangle类
class Triangle extends Graphical {
    getArea () {
        // todo
    }
}

抽象类中的抽象方法不包含具体实现并且必须在派生类中实现。也就是父类含有抽象方法,子类继承父类后必须实现该抽象方法。

抽象类和接口的区别

接口也是对一些通用性的属性或方法进行提炼。接口中只声明成员方法,不会实现;抽象类的方法可以实现也可以不具体实现。

本篇完!如果文章对你有一点点帮助,请记得点个赞哦。