Skip to content

类是对对象的一个抽象,对象中主要包含两个部分,属性和方法。

1、属性

  • 实例属性
  • 静态属性
  • 只读属性
typescript
class Person{
    // 实例属性
    name:string = '李四';
    // readonly 开头的属性表示的是一个只读的属性
    readonly age:number = 22;
    // 在属性前使用static关键字可以定义类属性(静态属性)
    // 静态属性也就是不用new就可以直接使用的属性
    static hi:string = 'hello';
}

2、方法

typescript
class Person{
    name:string = '李四';
    readonly age:number = 22;
    static hi:string = 'hello';
    // 实例方法
    sayName(){
        console.log(this.name)
    }
    // 类方法
    static sayName(){
        console.log("hello")
    }
}
const p = new Person( )
p.sayName()
Person.sayName()

3、constructor

在new的时候,构造函数会被调用。

typescript
class Dog{
    name:string;
    age:number;
    // constructor 被称为构造函数,构造函数会在对象创建时调用
    constructor(name,age) {
        // console.log("构造函数执行了")
        // 在实例方法中,this就表示当前实例
        this.name = name;
        this.age = age
    }
    bark(){
        alert("汪汪汪!")
    }
}
const dog = new Dog("李四",22)
console.log(dog);

4、继承

通过继承我们可以将多个类中共有的方法和属性写在一个父类当中。这样我们只需要写一次,就可以让所有子类都拥有了父类的属性和方法。

  • 如果在子类中添加了和父类中相同的方法,子类中的方法会覆盖父类中的方法。
typescript
class Animal{
    name:string;
    age:number;
    // constructor 被称为构造函数,构造函数会在对象创建时调用
    constructor(name,age) {
        // console.log("构造函数执行了")
        // 在实例方法中,this就表示当前实例
        this.name = name;
        this.age = age
    }
    bark(){
        alert("汪汪汪!")
    }
}
// 定义一个狗的类,使Dog类继承Animal类
// - 此时 Animal被称为父类,Dog被称为子类
// - 使用继承后,子类将会拥有父类的所有属性和方法
class Dog extends Animal{
    // 给子类单独添加方法
    sayDog(){
        console.log(this.name)
    }
}

const dog = new Dog("旺财",2)
console.log(dog);
dog.sayDog()

5.super

super 表示当前类的父类。

typescript
class Animal{
    name:string;
    constructor(name:string) {
        this.name = name
    }
    sayHello(){
        console.log("动物在叫")
    }
}

class Dog extends Animal{
    age:number;
    constructor(name:string,age:number) {
        //如果在子类中写了构造函数,在子类的构造函数必须对父类的构造函数
        //进行调用
        //因为此处的constructor会重写父类中的constructor
        super(name);
        this.age = age
    }
    sayHello() {
        //在类的方法中 super 就表示当前类的父类
        // super.sayHello();
        console.log("www!")
    }
}

const dog = new Dog("旺财",22)
dog.sayHello()
console.log(dog);

6.抽象类

在 class 前面加上 abstract 表示该类是抽象类,只能用来继承,不能用来创建对象。

typescript
abstract class Animal{
    name:string;
    constructor(name:string) {
        this.name = name
    }
    sayHello(){
        console.log("动物在叫")
    }
}

7.抽象方法

typescript
abstract class Animal{
    name:string;
    constructor(name:string) {
        this.name = name
    }
    // 定义一个抽象方法,并且没有方法体
    abstract sayHello():void;

}
class Cat extends Animal{
    // 抽象方法只能定义在抽象类当中,子类必须对抽象方法进行重写
    sayHello() {
        console.log('喵喵喵')
    }
}

const cat = new Cat("花花")
console.log(cat);
cat.sayHello() //喵喵喵