TypeScript:简单理解理解抽象类

抽象类就是供其它类继承的一个基础类。 一般不会直接被实例化。

和接口不同的是,抽象类可以包含成员属性的实现细节。

使用abstract关键字用于定义抽象类和在抽象类内部定义抽象方法。

这种概念读起来可能有点懵,先举个🌰!

     class Animal {
         name: string
    
         constructor(name: string) {
             this.name = name
         }
     }
    
     class Dog extends Animal {
     }
    
     const dog = new Dog('旺财')
     console.log(dog);
     const animal = new Animal('贝拉')
     console.log(animal)

我们定义了一个类Animal,定义了子类Dog继承于Animal,我们可以现在即可以通过Animal实例化对象,也可以通过Dog实例化对象,但是我们用Dog类就是为了去创建符合dog类的实例化对象,用Animal创建,岂不是多此一举,况且,如果我们再去定义一个Cat也继承于Animal类,那我用Animal类实例化出来的对象,到底是那家的。。。所以,我们想要的不过是,禁止使用Animal实例化对象,只允许Animal类起到一个继承的作用,那么这就是抽象类!

怎么创建一个抽象类?很简单,在class前面加上关键字abstract即可!

需要注意的是:

抽象方法:抽象方法只能定义到抽象类里面,没有具体的实现,即没有函数体,而且必须需要在子类中对此方法进行实现;抽象方法的语法与接口中的方法比较相似, 两者都是定义方法签名不包含方法体, 然而,抽象方法必须使用abstract关键字并且可以包含访问符;

下面就是一个抽象类,包含了一个属性name,一个run方法,一个say的抽象方法

    abstract class Animal {
        name: string;

        constructor(name: string) {
            this.name = name
        }

        run(): void {
            console.log(`${this.name}每天都晨跑`)
        }

        // 抽象方法:在父类中的方法前面加上abstract关键字,将方法定义为抽象方法,没有函数体,
        abstract say(): void  // 抽象方法只能定义到抽象类里面
    }

我们来试试,这个时候再使用Animal来实例化一个对象!

const animal = new Animal('贝拉')

可以看到啊,我们的命令行编译已经挂掉了,Cannot create an instance of an abstract class,翻译过来就是:无法创建抽象类的实例

 可见这个抽象类是成功的,现在的确无法再使用Animal实例化对象,还是老老实实继承吧

    // 定义了抽象方法之后,子类继承父类的时候,如不重新进行方法定义,则会报错
    class Dog extends Animal {
        say(): string {
            return `${this.name}在嗷呜`
        }
    }

    const dog = new Dog('陈贝拉')
    dog.run()
    console.log(dog.say())

 需要注意的是,一旦我们再抽象类中定义了抽象方法,那在继承的子类中,就必须对此抽象方法,进行定义,不然编译也会挂掉!

页面输出:

 抽象类完!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay丶萧邦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值