Ts 类

Ts 类

Ts的类

  • 仅能继承唯一父类

  • 可实现多个接口

  • 具有抽象类

  • 类可以被接口继承

  • 属性默认访问权限public

修饰符

访问权限 类中 子类 外部程序
public ✔️ ✔️ ✔️
protected ✔️ ✔️
private ✔️

readonly只读修饰符

它修饰的类的属性经过初始化赋值后,永远无法改写其属性值,只能访问。

构造器

与Java不同,Ts的构造器不能重载,它是唯一的。

class Person{
    public name:string
    constructor(name:string){
        this.name = name
    }
}

参数属性

我的理解上——这应该是Ts的语法糖,帮助开发者减少代码量

类属性可不写,而在构造器constructor中的参数前加上修饰符,如public,private,protected,readonly等。如此Ts即会判断是使用了参数属性。如下代码👇

class Person{
    constructor(public name:string){}//构造函数不用写具体实现
}
let jack = new Person('jack')
console.log(jack.name) // name属性并未在Person中申明,仅仅是在构造器参数name前加了一个public,竟然神奇地让Person具备了name属性

存取器

和Java的get/set具有一样的意义,Ts的语法稍微出入些。

class Person {
    private name:string = ''
    // get 函数返回值必须与对象一样
    get Name():string{
        return this.name
    }
    // set 不能加返回值,比如Name(name:string):void,这样会报错
    set Name(name:string) {
        if(name){
	        this.name = name            
        }
    }
}

let jack = new Person()
jack.Name = 'jack' //调用set
console.log(jack.Name)//调用get

静态属性

静态属性由static修饰,静态属性不能被类实体访问,只能由类访问!静态属性被所有类实体中的方法共享

Ts抽象类

不写程序了!仅列举一些注意事项

  • 抽象类中才可定义抽象方法
  • 抽象类不能被实例化
  • 抽象类可包含具体实现的方法和属性,但抽象方法不能实现
  • 类中属性无法抽象(属性不能被abstract修饰)

接口继承类

  • 接口继承类中的属性和方法

    class Person {
        name:string
        age:number
        say():void{
            console.log(`${this.name}今年${this.age}岁了`)
        }
    }
    interface PersonAction extends Person{
        action():void
    }
    
    class Student implements PersonAction{
        age: number;
        name: string;
    //实现接口中方法
        action(): void {
        }
    // 重写say方法
        say(): void {
        }
    }
    
posted @ 2022-12-16 22:40  勤匠  阅读(201)  评论(0编辑  收藏  举报