typeScript_类,类的构造函数,接口

构造函数

构造函数 ,是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与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
})()
   
复制代码

猜你喜欢

转载自juejin.im/post/7040755396218191903