定义一个类
class Person {
name: string;
// 属性 前面省略了public关键字,默认是public
constructor(name: string) {
// 构造函数,实例化触发的方法
this.name = name
}
run(): void {
console.log(this.name + '在运动')
}getNane():string {
return this.name
}setName(name: string):void {
this.name = name
}
}// 实例化
var p = new Person('李狗蛋')
p.run() // 李狗蛋在工作
p.getNane() // 李狗蛋
p.setName('张翠花') // name = 张翠花
继承
class Person {
name: string // 属性 前面省略了public关键字,默认是public
constructor(name: string) {
// 构造函数,实例化触发的方法
this.name = name
}
run(): void {
console.log(this.name + '在运动')
}
}// 继承 通过关键字extends继承父类,子类必需调用super
class Student extends Person {
constructor(name: string) {
super(name) // 初始化父类构造函数
}
// 子类不仅可以继承父类的属性和方法,还可以拓展自己的属性和方法
work(): void {
console.log(this.name + '在工作')
}
// 如果子类和父类有同样的方法,会调用子类的方法,如果调用的方法在子类找不到就去父类找,一直往上找,直到找不到为止
run(): void {
console.log(this.name + '在运动')
}
}var s = new Student('赵铁柱')
s.run() // 赵铁柱在运动
s.work() // 赵铁柱在工作
类里面的修饰符
// 类里面的修饰符,typescript里面定义属性的时候给我们提供了三种修饰符
/**
* public共有类型:在类里面、子类、外部都可以访问
* protected保护类型:在类里面、子类都可以访问。在类外部不可访问
* private私有类型:在类里面可以访问。在子类、外部不可访问
* 如果属性不加修饰符,默认是public
*/// 演示public
class Person {
public name: string
constructor(name: string) {
this.name = name
}
run(): void {
console.log(this.name)
}
}class Student extends Person {
constructor(name: string) {
super(name)
}
log(): void {
console.log(this.name)
}
}let p = new Person('李狗蛋')
console.log(p.name) // 李狗蛋let s = new Student('张翠花')
s.log() // 张翠花// 演示protected
class Person {
protected name: string
constructor(name: string) {
this.name = name
}
run(): void {
console.log(this.name)
}
}class Student extends Person {
constructor(name: string) {
super(name)
}
log(): void {
console.log(this.name)
}
}let p = new Person('李狗蛋')
// protected在外部调用时还是可以执行的,最终转化为js,但是在ts会语法提示报错
console.log(~~p.name~~ ) // 李狗蛋let s = new Student('张翠花')
s.log() // 张翠花// 演示private
class Person {
private name: string
constructor(name: string) {
this.name = name
}
run(): void {
console.log(this.name)
}
}class Student extends Person {
constructor(name: string) {
super(name)
}
log(): void {
// 私有只能在类里面使用,外部有子类会语法提示错误
console.log(~~this.name~~ )
}
}let p = new Person('李狗蛋')
p.run() // 李狗蛋类内部使用了name
// 私有只能在类里面使用,外部有子类会语法提示错误
console.log(~~p.name~~ ) // 李狗蛋let s = new Student('张翠花')
s.log() // 张翠花
类里面的静态属性和方法
/**
* 类里面的静态属性、静态方法
* 在属性和方法前面加 static
*/
class Person {
name: string
static code: number = 1
constructor(name: string) {
this.name = name
}
run(): void {
console.log(this.name)
}
static print(): void {
// 静态方法里面不能调用实例属性
console.log('静态方法' + ~~this.name~~ ) // 语法提示错误
// 只能调用静态属性
console.log('静态方法' + Person.code) // 静态方法1
console.log('静态方法')
}
}console.log(Person.code) // 1
Person.print() // 静态方法
多态:多态属于继承
// 类:多态,父定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现
class Animal {
name: string
constructor(name: string) {
this.name = name
}
// 如果父的方法能满足子类的需求,那么子类就不用写eat方法
// 相反父类不能满足,那么就在子类再写一个eat方法
eat(food: string): void {
console.log(`${this.name}吃${food}`)
}
}class Dog extends Animal {
constructor(name: string) {
super(name)
}
}// 实例
let dog = new Dog('小黑')
dog.eat('狗粮') // 小黑吃狗粮class Cat extends Animal {
constructor(name: string) {
super(name)
}
// 父类方法不能满足子类,子类自己写一个方法
eat(food: string): void {
console.log(`${this.name}吃${food},喝水`)
}
}let cat = new Cat('小花猫')
cat.eat('猫粮') // 小花猫吃猫粮,喝水
typescript中的抽象类
/**
* typescript中的抽象类,它是提供其它类继承的基类,不能直接被实例化
* abstract关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现
* 抽象类和抽象方法用来定义标准
*/
abstract class Animal {
name: string
constructor(name: string) {
this.name = name
}
// 抽象方法
abstract eat(): void
}// 无法直接实例化,,错误的写法
// let animal = new Animal('小花猫') 错误的写法
// abstract定义标准, 是子类必须定义抽象类的抽象方法,不然语法提示错误
class Dog extends Animal {
constructor(name: string) {
super(name)
}
// 抽象类的子类,必须实现抽象类的抽象方法
eat(): void {
console.log(this.name + '吃东西')
}
}let dog = new Dog('小黑')
dog.eat() // 小黑吃东西
推荐阅读
- JavaScript|JavaScript: BOM对象 和 DOM 对象的增删改查
- 前端|web前端dya07--ES6高级语法的转化&render&vue与webpack&export
- JS/JavaScript|JS/JavaScript CRC8多项式 16进制
- JS|VUE学习笔记[30-46]
- 腾讯TEG实习|腾讯实习——Vue解决跨域请求
- 地图|高德地图清除指定覆盖物 自定义覆盖物样式(完整dome)
- Pyecharts|Pyecharts 猎聘招聘数据可视化
- flex|C语言-使用goto语句从循环中跳出
- HTML+Js实战项目|在网页中实现icon小图标的几种方法
- js中国标准时间转化为年月日,时间戳