ts-10 Class 类

34 阅读1分钟

修饰符

  • public 公共的
    • 默认值 写不写内外部都可以访问
  • private 私有的
    • 只能内部访问 外部无法访问
  • protected 私有的
    • 和private 区别 是 protected 内部和子类中访问
  • 例子
    •   class Person {
          name: string
          age: number
          public address: string
          private sex: string
          protected height: number
      
          constructor(name: string, age: number, address: string, sex: string, height: number) {
            this.name = name
            this.age = age
            this.address = address
            this.sex = sex
            this.height = height
            console.log(sex)
            console.log(height)
          }
        }
      
        class Weight extends Person {
          constructor() {
            super('瑞雯', 12, '诺克萨斯', '女', 150)
            console.log(this.height) // 150
          }
        }
      
        let p = new Person('瑞雯', 12, '诺克萨斯', '女', 150)
        let w = new Weight()
        console.log(p.address)
        // console.log(p.sex) // error
      

静态属性和方法

  • 静态属性 和 方法 在内部是无法访问的,只能通过class名来访问
  • 例子
    •   class Person {
          name: string
          age: number
          static address: string = '艾欧尼亚'
      
          constructor(name: string, age: number) {
            this.name = name
            this.age = age
          }
      
          static like() {
            // console.log(this.age) // error
            console.log(this.address) // 是可以访问的
            return 'like-hs'
          }
        }
      
        let p = new Person('亚索', 12)
        console.log(Person.address)
        console.log(Person.like())
      

interface约束Class

  • interface 定义类 使用关键字 implements 后面跟interface的名字多个用逗号隔开 继承还是用extends
  • 例子
    •   interface A {
          age(type: number): number
        }
        interface N {
          name(type: string): void
        }
      
        class Add {
          address: string
      
          constructor(address: string) {
            this.address = address
          }
        }
      
        class Person extends Add implements A, N {
          age(type: number): number {
            return type
          }
          name() {}
        }
      
        let p1 = new Person('祖安')
        console.log(p1)
      

抽象类

  • 应用场景
    • 如果你写的类实例化之后毫无用处此时我可以把他定义为抽象类,通过 abstract 关键字
  • 例子
    •   abstract class A {
          name: string
          constructor(name: string) {
            this.name = name
          }
          setName(name: string) {
            this.name = name
          }
          // 定义了抽象类函数  必须在派生类去实现的
          abstract getName(): string
        }
      
        class B extends A {
          constructor() {
            super('亚索')
          }
          getName(): string {
            return this.name
          }
        }
      
        // 抽象类是不能被实例化的
        // let a1=new A() // error
        let b1 = new B()
        console.log(b1.getName()) // 亚索
        b1.setName('盲仔')
        console.log(b1.getName()) // 盲仔