// 使用class关键字来定义类
class Person{
// 直接定义的是实例属性,需要new Person()生成的实例去访问
name: string = '张三'
// readonly name: string = '张三' //设置只读后,实例化对象就不能再更改
// 加入static关键词 定义静态属性(类属性)Person.age 进行访问
static age: number = 12
// static readonly age: number = 12 // 设置静态属性为制度,static readonly的顺序不能变
sayHello(){ // 直接定义的方法,就是实例方法
console.log('hello')
}
static sayWhy(){ // static, 类方法,Person.sayWhy()
console.log('why')
}
}
var per = new Person()
console.log('打印',per.name)
per.name = '李四' // 实例属性可以更改
console.log('打印2',per.name)
console.log('打印1',Person.age)
// 构造函数使用
class Dog{
name: string
age: number
// constructor 为构造函数
// 构造函数会在对象创建时调用
constructor(name:string, age:number){
// 在视力方法中,this就表示当前的实力
// 在构造函数中当前对象就是当前新建的那个对象
// 可以通过this向新建的对象中添加属性
this.name = name
this.age = age
}
}
var dog = new Dog('哈士奇',32)
console.log('dog', dog)
// 继承
class Animal{
name: string
constructor(name:string){
this.name = name
}
sayHello(){
console.log('say hello')
}
}
class Dog extends Animal{
age: number
constructor(name:string, age:number){
// super代表子类的父类
// 子类中写了构造函数,必须对父类的构造函数进行调用
super(name)
this.age = age
}
// 增加子类的方法
run(){
console.log(this.name + '我在跑')
}
// 重写sayHello
sayHello(): void {
console.log('汪汪汪')
}
}
var dog = new Dog('哈士奇',3)
console.log(
'dog',dog
)
dog.sayHello()
// 抽象类
超类只用于被其他类继承,不能用于创建对象,以 abstract 开头的类称为抽象类。
抽象类可以添加抽象方法
abstract class Animal{
name: string
constructor(name:string){
this.name = name
}
// 抽象方法以abstract开头,没有方法体
// 抽象方法只能定义在抽象类中,子类必须对抽象方法进行重写,否则报错
abstract sayHello():void
}
class Dog extends Animal{
age: number
constructor(name:string, age:number){
super(name)
this.age = age
}
// 重写sayHello
sayHello(): void {
console.log('汪汪汪')
}
}
网友评论