Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第5章:类与面向对象编程

第5章:类与面向对象编程

5.5 抽象类与接口实现

1. 抽象类(Abstract Class)

抽象类是一种不能被直接实例化的类,它用于定义其他派生类(子类)的通用结构和行为。抽象类通过 abstract 关键字声明,可以包含:

  • 抽象方法:只有声明没有实现,子类必须重写。
  • 具体方法:可以有默认实现,子类可选择是否重写。

示例代码

abstract class Animal {
    abstract makeSound(): void; // 抽象方法
    move(): void {              // 具体方法
        console.log("Moving...");
    }
}

class Dog extends Animal {
    makeSound(): void {         // 必须实现抽象方法
        console.log("Bark!");
    }
}

const dog = new Dog();
dog.makeSound(); // 输出: Bark!
dog.move();      // 输出: Moving...

2. 接口实现(Interface Implementation)

接口(interface)用于定义类的公共契约,而类可以通过 implements 关键字实现一个或多个接口。与抽象类不同:

  • 接口不能包含具体实现,只能定义属性和方法的签名。
  • 类必须实现接口中定义的所有成员。

示例代码

interface Loggable {
    log(message: string): void;
}

class ConsoleLogger implements Loggable {
    log(message: string): void {
        console.log(`[LOG]: ${message}`);
    }
}

const logger = new ConsoleLogger();
logger.log("Hello, TypeScript!"); // 输出: [LOG]: Hello, TypeScript!

3. 抽象类与接口的区别

特性抽象类接口
实例化❌ 不能直接实例化❌ 不能实例化
实现方法可包含具体方法和抽象方法只能定义签名,无实现
多继承❌ 单继承✅ 可实现多个接口
访问修饰符支持(public/private等)默认为 public
使用场景提供通用基类逻辑定义行为契约

4. 结合使用抽象类与接口

在实际开发中,可以同时使用抽象类和接口,例如:

abstract class Shape {
    abstract area(): number;
}

interface Drawable {
    draw(): void;
}

class Circle extends Shape implements Drawable {
    constructor(private radius: number) { super(); }
    area(): number {
        return Math.PI * this.radius ** 2;
    }
    draw(): void {
        console.log("Drawing a circle");
    }
}

5. 实际应用场景

  1. 框架设计:如 Angular 的 @Component 装饰器依赖抽象类。
  2. 插件系统:通过接口定义插件必须实现的方法。
  3. 多态设计:抽象类提供基础逻辑,接口扩展额外能力。

最佳实践:优先使用接口定义轻量级契约,当需要共享代码时再使用抽象类。

Last Updated:: 3/27/25, 10:50 AM