美文网首页
类-构造函数-继承-抽象类

类-构造函数-继承-抽象类

作者: 浅浅_2d5a | 来源:发表于2022-07-27 13:52 被阅读0次

    // 使用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('汪汪汪')
        }
    }
    

    相关文章

      网友评论

          本文标题:类-构造函数-继承-抽象类

          本文链接:https://www.haomeiwen.com/subject/olnoirtx.html