TS class类的定义、extends类的继承、属性修饰符、implements类的接口实现、abstract抽象类

TS class类的定义、extends类的继承、属性修饰符、implements类的接口实现、abstract抽象类

1. class类定义
class Person {
  // 与 js 不同,这里必须要声明所需变量,否则 constructor 中 this 无法访问到属性
  name:string
  age:number
  address:string
  
  constructor(name:string,age:number,address:string) {
    this.name = name
    this.age = age
    this.address = address
  }
}

let p1 = new Person("ccc", 22, "china")
console.log(p1)  // Person { name: 'ccc', age: 22, address: 'china' }
2. extends类继承
class Person {
  name:string
  age:number
  address:string
  constructor(name:string,age:number,address:string) {
    this.name = name
    this.age = age
    this.address = address
  }
}

// 使用 extends 继承 Person 类
class Man extends Person {
  sex:number
  constructor(name:string,age:number,address:string, sex:number) {
    super(name, age, address)
    this.sex = sex
  }
}

let p1 = new Man("ccc", 22, "china", 1)
console.log(p1)  // Man { name: 'ccc', age: 22, address: 'china', sex: 1 }
3. 属性修饰符(static、public、protected、private)
class Person {
  static s = "static"
  name1:string
  protected age:number
  private address:string
  constructor(name1:string,age:number,address:string) {
    this.name1 = name1
    this.age = age
    this.address = address
  }
  static fun() {
    // static 修饰的方法无法访问其他修饰符修饰的变量
    this.name1  // 报错
    this.s  // 可以访问
  }
}

class Man extends Person {
  sex:number
  constructor(name:string,age:number,address:string, sex:number) {
    super(name, age, address)
    this.sex = sex
    this.address  // 报错:address 为 private 私有变量
  }
}

let p1 = new Man("ccc", 22, "china", 1)

p1.s // 报错:static 修饰的变量无法在实例上访问
Person.s // 可以访问
p1.name1 // 可以访问
p1.age // 报错:protected 修饰的变量无法在实例上访问
4. implements类的接口实现
interface F {
  // 接口中只能包含抽象方法,不能有具体实现
  cName: () => void
}

class Person implements F {
  name: string
  age: number
  address: string

  constructor(name: string, age: number, address: string) {
    this.name = name
    this.age = age
    this.address = address
  }
  // 需要对 interface F 中有具体的方法实现
  cName():void {
    console.log(this.name);
  }
}

let p1 = new Person("ccc", 22, "china")
p1.cName()  // ccc
5. abstract抽象类
abstract class Person {
  name1:string
  constructor(name1:string) {
    this.name1 = name1
  }
  // 抽象方法只能在抽象类中定义
  abstract cName():void
}

let p1 = new Person("chenxize") // 报错:无法创建抽象类的实例

class Man extends Person {
  age:number
  constructor(name:string, age:number) {
    super(name)
    this.age = age
  }
  // 需要对抽象类中的抽象方法有具体实现
  cName():void {
    console.log(this.name1);
  }
}

let m1 = new Man("chenxize", 22)
console.log(m1);  // Man { name1: 'chenxize', age: 22 }

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
接口抽象类是面向对象编程中的两个重要概念,它们都用于实现代码的重用和灵活性。下面是对接口抽象类的简要概述: 接口: - 接口是一种完全抽象的型,它只定义了方法的声明,没有方法的实现。 - 接口中的方法默认是public和abstract的,不需要使用关键字来指定。 - 接口可以包含常量,这些常量会被隐式地指定为public static final。 - 可以通过使用关键字implements实现接口,并提供接口中所有声明的方法的实现。 - 接口可以继承一个或多个其他接口实现继承的特性。 抽象类: - 抽象类是一种不能被实例化的,它可以包含抽象方法和具体方法。 - 抽象方法是没有实现的方法,只有方法的声明。 - 抽象类可以包含构造器,用于初始化抽象类的实例。 - 抽象类可以有public、protected和default这些访问修饰符。 - 可以通过使用关键字extends继承抽象类,并提供抽象类中所有声明的方法的实现。 - 抽象类可以继承一个实现多个接口实现继承的特性。 总结: 接口是一种完全抽象的型,只定义了方法的声明;抽象类是一种不能被实例化的,可以包含抽象方法和具体方法。接口只能继承其他接口,而抽象类可以继承一个实现多个接口。在设计层面上,接口更加灵活,可以用于实现多态性,而抽象类更加具体,可以包含一些通用的方法实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值