ts-类
class Person{
name:string // 属性 前面省略了public关键词
constructor(n:string){ // 构造函数,实例化类的时候触发的方法
this.name = n
}
run():void{
alert(this.name)
}
getName():string{
return this.name
}
}
let p =new Person('zhangsan')
p.run()
继承(extends / super)
// 父类:
class Person{
name:string
constructor(n:string){
this.name = n
}
run():string{
return `${this.name}在运动`
}
}
// 子类:
class Web extends Person{
// 继承 extends / super结合使用,继承父类,子类自己的方法也可以使用
constructor(n:string){
super(name) // 初始化父类的构造函数
}
work():void{
alert(`${this.name}在工作`)
}
}
let w = new Web('李四')
w.run()
w.work()
类修饰符(public / protected / private)
属性不加修饰符默认为public
public
:公有,在类里面,子类,类外面都可以访问
protected
:保护类型,在类里面,子类里面可以访问,在类外部无法访问
private
:私有,在类里面可以访问,子类和类外都无法访问,没有继承在当前类的调用可以访问
类-静态属性 / 静态方法
class Person{
public name:string
static sex:string // 静态属性
constructor(name:string){
this.name = name
}
run(){ // 实例方法
alert(`${this.name}在运动`)
}
work(){
alert(`${this.name}在运动`)
}
static print(){ // static关键字,静态方法不能直接调用类里面的属性,只能调用静态属性
alert(Person.sex + '孩子')
}
}
let p =new Person()
p.run()
Person.print() // 静态方法直接调用
多态(属于继承)
父类定义一个方法不去实现,让继承它的子类去实现,每一个子类有不同的表现
class Animal{
name : string
constructor(name:string){
...
}
eat(){
...
}
}
class Dog extends Animal{
constructor(name:string){
super(name)
}
eat(){
alert(`${this.name}+吃骨头`)
}
}
...
抽象方法 - 抽象类
(定义标准)
抽象类:是提供其他类继承的基类,不能直接被直接实例化
用abstract
关键字定义抽象类和抽象方法,抽象类中的抽象方法不包含具体实现并且必须在派生类中实现
abstract 抽象方法只能放在抽象类中
abstract class Animal{
public name:string
constructor(name:string){
this.name = name
}
abstract eat():any;
}
class Dog extends Animal{
// 抽象类的子类必须实现抽象类里面的抽象方法
constructor(name:string){
super(name)
}
eat(){
console.log(this.name+'是动物')
}
}
let d = new Dog('小狗')
d.eat()