构造函数
构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。而TypeScript的构造函数用关键字constructor来实现。可以通过this(和java/C#一样代表对象实例的成员访问)关键字来访问当前类体中的属性和方法。
class Dog{
name:string;
age:number
bark(){
console.log(this.name+'bark')
}
// 构造函数
// 对象创建时调用
constructor(name:string,age:number){
/**
* 在实例方法中,this就表示当前的实例
* 在构造函数中当前对象就是当前新建的那个对象
* 可以通过this指向新建的对象中添加属性
*/
console.log('构造函数执行')
this.age=age;
this.name=name;
}
}
const dog=new Dog('旺财',2)
const dog1=new Dog('小黑',2)
console.log(dog) // {age: 2 name: "旺财bark"}
console.log(dog1)//{age: 2 name: "小黑"}
dog.bark() // 旺财bark
复制代码
继承
继承使用关键字extends,调用父类使用super,子类继承父类的属性和方法,并且子类可以改写父类的属性和方法
// 定义一个猫的类 继承上一个并补充属性
class cat5 extends Animal {
run(){
console.log(`${this.name}running`)
}
}
let cat1=new cat5('hauhau',6)
console.log(cat1)
cat1.run()
// 可重写实例中的方法
复制代码
方法重写(重载)
class cat5 extends Animal {
// 重载bark=方法
// 子类方法添加了与父类相同的方法,子类覆盖父类方法成为方法重写
bark(){
console.log(`${this.name}喵喵喵`)
}
const cat==new cat5('小花',2)
cat.bark() //小花喵喵
复制代码
super关键字
派生类的构造函数必须包含 "super" 调用
class Dog extends Animal{
age:number
// 如果在子类添加构造方法
constructor(name:string,age:number){
super(name)
this.age=age
}
bark(){
// 引用父类的实力
super.bark()
}
}
复制代码
抽象类
抽象类: abstract 修饰, 里面可以没有抽象方法。但有抽象方法(abstract method)的类必须声明为抽象类(abstract class)
多态:父类定义一个方法不去实现,让继承它的子类去实现 每一个子类有不同的表现
// 以abstract 开头的类 是抽象类
// 不能拿来创建对象 专门用来继承 不是创建实例
// 可以添加抽象方法
abstract class animal{
name:string;
constructor(name:string){
this.name=name
}
// 定义一个抽象方法 且只能定义在抽象类中
// 子类必须重写抽象方法
abstract sayHello():void;
}
// 强制实现抽象方法
class Cat extends animal{
sayHello(){
console.log('喵喵')
} //未实现抽象方法会报错
}
复制代码
接口
接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法
(function(){
// 接口用来定义一个类的结构,用定义类中包含的属性和方法
// 可用于类型申明
interface inter{
name:string,
age:number
}
interface inter{
gender:string
}
// 接口限制类的接口
// 接口所有属性不能有实际值
// 接口只定义结构不考虑实际值 所有方法都为抽象方法
interface myinter{
name:string;
sayhello():void
}
class myClass implements myinter{
name:string
constructor(name:string){
this.name=name
}
sayhello(){
console.log('hello')
}
}
let a=new myClass('nayana')
a.sayhello() //hello
})()
复制代码