Skip to content

Interface和类的区别

✍️天畅🕐2025-05-07

一、相同点

  • 都可以被类实现implements

  • 都可以定义规范(属性、方法结构)

  • 都不能直接实例化(抽象类本身不能实例化)

二、主要区别

interfaceabstract class
本质纯定义规范(只有类型)既可以定义规范也可以提供默认实现
关键字interfaceabstract class
是否有实现❌ 只能定义结构,不能写实现逻辑✅ 可以写部分方法的具体实现
多继承✅ 支持实现多个接口❌ 只能单继承
编译后只存在于编译阶段,JavaScript中没有interface概念转成真实的JS类存在
属性修饰符❌ 不支持(readonly除外)✅ 支持(public / protected / private
使用场景设计标准、约束结构(更轻量)需要部分默认行为或统一基类逻辑

三、示例对比

interface 示例

ts
interface Animal {
  name: string
  move(): void
}

class Dog implements Animal {
  name = 'dog'
  move() {
    console.log('Running')
  }
}

abstract class 示例

ts
abstract class Animal {
  name: string

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

  abstract move(): void

  sayHello() {
    console.log(`Hello, I am ${this.name}`)
  }
}

class Dog extends Animal {
  move() {
    console.log('Running')
  }
}

四、总结一句话

🔥 interface 定义规范abstract class 定义规范 + 部分实现