typescript学习:class类

本文介绍了TypeScript中的类和继承特性,包括公共属性修饰符(public, private, protected, readonly, static)、类的继承、存取器setter和getter以及抽象类的概念和用法。示例展示了如何创建和使用这些特性,并强调了抽象类不能直接实例化以及子类必须实现抽象方法的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文内容如下

class类

如果你都有了答案,可以忽略本文章,或去TS学习地图寻找更多答案


ES6中的 TS类

公共属性修饰符:

  • public:公开的,可读可写,默认修饰符
  • private:私有的,不可读不可写
  • protected:子类可访问
  • readonly: 只能读不能写
  • static:静态属性或静态方法(JS中也有)
class Animal {
    public name: string;
	
	constructor(name: string){
		this.name = name
	}
	
	static isAnimal(instantce) {
		return instantce instanceof Animal
	}
	
    eat(){
    	console.log(`${this.name} is eating`)
	}
}

const dog = new Animal('旺财')
dog.eat()            //旺财 is eating
Animal.isAnimal(dog) //true

TS类继承

class Person {
    name: string
    constructor(name: string) {
        this.name = name
    }
    run(): string {
        return `${this.name} is running`
    }
}
let p = new Person('dashen')
p.run()

class Student extends Person {
    constructor(name: string, public age: number) {
        super(name)  //实现继承父类的constructor中name
    }

    study() {
        console.log(`${this.name} is studying`)
    }
}
const s = new Student('小明')
console.log(s)  //{ name: '小明', age: 18 }
s.study()   //小明 is studying

存取器 setter getter

例子:对名字的长度做出限制

class People {
    private _fullname: string = 'tom'

    get fullname(): string {
        return this._fullname
    }

    set fullname(name: string) {
        if (name && name.length < 6) {
            this._fullname = name
        } else {
            console.log(`the length of '${name}' is greater than 6`)
        }
    }
}

let p = new People()
console.log(p.fullname);     //'tom'
p.fullname = 'hello world'   //the length of 'hello world' is greater than 6
p.fullname = 'hello'
console.log(p.fullname);     //'hello'

抽象类

抽象类:原型

  1. 使用关键字:abstract,抽象方法只能出现在抽象类里面
  2. 提供其他类继承的基类,不能直接被实例化
  3. 抽象类的子类必须实现抽象类里面的抽象方法
//定义标准
abstract class Animal {
    name: string = ''
    contructor(name: string) {
        this.name = name
    }

    run() {
        console.log(this.name + 'is running')
    }

    abstract eat(): any
}


class Dog extends Animal {
    constructor(public name: string) {
        super()
    }
    eat() {
        console.log(this.name + 'is eating')
    }
    sleep() {
        console.log(this.name + 'is sleeping')
    }
}
let d: Dog = new Dog('旺财')
d.eat()
d.run()

let d = new Animal('旺财')    // 报错,抽象类不能实例化

let d: Animal = new Dog('旺财')  
d.sleep()  //报错,抽象类没有sleep方法

学习更多

TS学习地图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值