TypeScript类

类的定义

//定义一个Person类
class Person {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    run(): void {//方法
        console.log(this.name+ "在跑步");
    }
}
var p = new Person("张三");
p.run();

类的继承

通过 extends 来继承父类
通过 super 来初始化父类的构造函数 并且传递参数

//父类
class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    eat(): void {//父类方法
        console.log(this.name + "在吃东西");
    }
}

//子类
class Dog extends Animal {
    age: number;//子类属性
    constructor(name: string, age: number) {
        super(name);
        this.age = age;
    }
    run(): void {//子类方法
        super.eat();//使用super关键字调用父类中的方法
        console.log(this.name + "在跑");
    }
}

var dog:Dog = new Dog("小狗子", 2);
dog.run();

修饰符

三种修饰符
public:公有类型,在当前类里面、子类、类外面都可以访问
protected:保护类型,在当前类里面、子类里面可以访问,在类外部没法访问
private:私有类型,在当前类里面可以访问,子类、类外部都没法访问
readonly:修饰的不是成员的访问权限,而是成员的再赋值权限。 只读属性必须在声明时或构造函数里被初始化。

静态属性

被静态修饰符修饰的属性就是静态属性,静态属性可以通过类名直接调用

class Person {
    name: string;
    static sex: string = "男";
    constructor(name: string) {
        this.name = name;
    }
    run(): void {//方法
        console.log(this.name+ "在跑步");
    }
}

console.log(Person.sex);

静态方法

被静态修饰符修饰的方法就是静态方法,静态方法可以通过类名直接调用,但是在静态方法内部,不能直接调用当前类的非静态属性、非静态方法。

class Person {
    name: string;
    static sex: string = "男";
    constructor(name: string) {
        this.name = name;
    }
    run(): void {//方法
        console.log(this.name+ "在跑步");
    }

    static print(): void {//被静态修饰符static修饰的方法
        // console.log('姓名:' + this.name);//错误
        console.log('性别:' + Person.sex);//正确
        // this.run();//错误
    }
}

Person.print();

抽象类

抽象类不能被实例化。用abstract关键字定义抽象类和抽象方法,抽象类中定义的抽象方法没有方法体,子类必须对抽象方法进行重写,abstract抽象方法只能放在抽象类里面。
我们常常使用抽象类和抽象方法用来定义标准。
类似多态:父类定义一个方法不去实现,让继承的子类去实现,每一个子类有不同的表现形式

//动物抽象类,所有动物都在跑(假设),但是吃的东西不一样,所以把吃的方法定义成抽象方法
abstract class Animal {
    name: string;
    constructor(name: string) {
        this.name = name;
    }
    abstract eat(): any;//抽象方法不包含具体实现并且必须在子类中实现
    run() {
        console.log(this.name + "在跑")
    }
}

class Dog extends Animal {
    constructor(name: string) {
        super(name);
    }
    eat(): any {//抽象类的子类必须实现抽象类里面的抽象方法
        console.log(this.name + "吃骨头");
    }
}

var d: Dog = new Dog("小狼狗");
d.eat();

class Cat extends Animal {
    constructor(name: string) {
        super(name);
    }
    eat(): any {//抽象类的子类必须实现抽象类里面的抽象方法
        console.log(this.name + "吃老鼠");
    }
}

var c: Cat = new Cat("小花猫");
c.eat();

  转载请注明: 小浩之随笔 TypeScript类

 上一篇
TypeScript接口Interface TypeScript接口Interface
在编程中,接口是一种规范的定义。接口跟抽象类有点像,但是,接口中不能有方法体,只允许有方法定义。 属性类型接口 //对传入对象的属性约束,以下这个是一个属性接口 interface User { name: string;
2021-10-23
下一篇 
TypeScript函数 TypeScript函数
函数格式 // 格式一 function 函数名(参数列表): 返回值类型 { 函数体 ... [return 返回值;] } //格式二 let 函数名 = function (参数列表): 返回值类型 { 函数体
2021-10-21
  目录