TypeScript类

继承和多态

之前的JavaScript是基于原型(prototype)继承来实现可复用的“类”,而TypeScript是真正的实现了类,真正可以使用面向对象的编程思想。

class Animal {
    name:string;
    // Animal类的构造方法
    constructor(theName: string) { this.name = theName; }
    move(meters: number = 0) {
        console.info(this.name + " moved " + meters + "m.");
    }
}
// 继承
class Snake extends Animal {
    constructor(name: string) { super(name); }
    move(meters = 5) {
        console.info("Slithering...");
        super.move(meters);
    }
}
class Horse extends Animal {
    constructor(name: string) { super(name); }
    move(meters = 45) {
        console.info("Galloping...");
    }
}
let sam = new Snake("Sammy the Python");
let tom: Animal = new Horse("Tommy the Palomino"); 
sam.move();
tom.move(34);

Horse类继承了Animal类 并且重写了move方法,这样move()方法在不同的类中就具有不同的功能,这就是多态
派生类的构造函数必须调用super(),它会执行基类的构造方法。

修饰符

类中的修饰符有:public, private, protected三种类型。

class Animal {
    public name:string; // 谁都可以访问
    protected height:number; // 可在子类中访问
    private weight:number; // 仅能在Animal中访问
    // Animal类的构造方法
    constructor(theName: string) { this.name = theName; }
    move(meters: number = 0) {
        console.info(this.name + " moved " + meters + "m.");
    }
}

参数属性

如下例可以使用protected theName: string限定构造函数的参数,

class Animal {
    static type = {run:0, jump:1};  // 静态成员变量
    name:string;
    // Animal类的构造方法
    constructor(protected theName: string) { this.name = theName; }
    move(meters: number = 0) {
        console.info(this.name + " moved " + meters + "m.");
    }
}

抽象类

**简单来说,接口更注重功能的设计,抽象类更注重结构内容的体现。**
abstract class Animal {
    abstrack eat():void; // 必须在派生类中实现
    move(meters: number = 0) {
        console.info(this.name + " moved " + meters + "m.");
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 人生苦多,快来 Kotlin ,快速学习Kotlin! 什么是Kotlin? Kotlin 是种静态类型编程...
    任半生嚣狂阅读 26,356评论 9 118
  • 类是一个重要的C#编程概念,它在一个单元内定义了表示和行为。类提供了面向对象编程和面向组件编程所需的语言支持,是创...
    CarlDonitz阅读 4,400评论 0 2
  • javascript提供构造函数和原型的方式来构造复用组件; TypeScript提供类的概念;共同点都要实例化;...
    叶向晚77阅读 5,212评论 0 1
  • 重新系统学习下C++;但是还是少了好多知识点;socket;unix;stl;boost等; C++ 教程 | 菜...
    kakukeme阅读 20,148评论 0 50
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,929评论 18 399