C#学习9——接口、抽象类

一、接口
1.什么是接口

官方话:是一种定义契约(一组方法、属性、事件或索引器的抽象声明)的机制,它规定了实现该接口的类或结构必须提供这些成员的具体实现。接口是面向对象编程中实现多态和抽象的重要工具。

个人理解:策划书(规定了需要实现什么功能)

2.接口定义

修饰符 interface 接口名

{

方法;

属性

}

3.接口的使用:
cs 复制代码
using System;

// 接口定义
interface IAnimal
{
    void Speak(); // 动物发声方法
}

// 实现类:狗
class Dog : IAnimal
{
    public void Speak() => Console.WriteLine("汪汪汪");
}

// 实现类:猫
class Cat : IAnimal
{
    public void Speak() => Console.WriteLine("喵喵喵");
}

class Program
{
    static void Main()
    {
        IAnimal dog = new Dog();
        IAnimal cat = new Cat();
        
        dog.Speak(); // 输出:汪汪汪
        cat.Speak(); // 输出:喵喵喵
    }
}

类似重写,但又不一样

一句话总结

  • 接口:"你必须能做这件事,但具体怎么做我不管"(如:所有厨师都要会做宫保鸡丁)。
  • 重写:"你爹是这么做的,但你可以改"(如:祖传宫保鸡丁要放花生,你可以改成放腰果)。
二、抽象类
1.什么是抽象类?

官方话语:抽象类是 C# 中一种特殊的类,它不能被实例化,主要用于作为其他类的基类(父类)。抽象类的核心特点是可以包含抽象方法(只有方法定义,没有实现),这些抽象方法必须由继承它的子类实现。

个人理解:带模板的策划书

2.定义抽象类

访问修饰符\] abstract class 类名 { // 抽象成员(必须由子类实现) \[访问修饰符\] abstract 返回类型 抽象方法名(参数列表); \[访问修饰符\] abstract 属性类型 抽象属性名 { get; set; } ... } ###### 3.使用抽象类: eg: ```cs // 抽象类:动物 abstract class Animal { public abstract string Sound { get; } // 抽象属性 public abstract void Speak(); // 抽象方法 public void Eat() => Console.WriteLine("吃东西"); // 普通方法 } // 子类:狗 class Dog : Animal { public override string Sound => "汪汪"; public override void Speak() => Console.WriteLine(Sound); } // 使用示例 Animal dog = new Dog(); dog.Speak(); // 输出:汪汪 dog.Eat(); // 输出:吃东西 ``` ##### 三、接口和抽象类的区别 | **抽象类** | **接口** | |---------------------|-----------------------------| | 可以包含抽象方法和普通方法 | 只能包含方法签名(不能有实现) | | 子类使用 `:` 继承一个抽象类 | 子类使用 `:` 实现多个接口 | | 用于定义一组相关类的共同行为和部分实现 | 用于定义不相关类的共同行为(如 "可打印""可排序") | | 关键字:`abstract` | 关键字:`interface` |

相关推荐
QQ1__8115175151 天前
Spring boot名城小区物业管理系统信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
前端·vue.js·spring boot
钛态1 天前
前端微前端架构:大项目的救命稻草还是自找麻烦?
前端·vue·react·web
一粒黑子1 天前
【实战解析】阿里开源 PageAgent:纯前端 GUI Agent,一行JS让网页支持自然语言操控
前端·javascript·开源
独角鲸网络安全实验室1 天前
2026微信小程序抓包全解析:从实操落地到合规风控,解锁前端调试新范式
前端·微信小程序·小程序·抓包·系统代理绕过·https证书严格校验·进程隔离
紫微AI1 天前
前端文本测量成了卡死一切创新的最后瓶颈,pretext实现突破了
前端·人工智能·typescript
GISer_Jing1 天前
AI前端(From豆包)
前端·aigc·ai编程
IT枫斗者1 天前
前端部署后如何判断“页面是不是最新”?一套可落地的版本检测方案(适配 Vite/Vue/React/任意 SPA)
前端·javascript·vue.js·react.js·架构·bug
测试修炼手册1 天前
[测试技术] 深入理解 JSON Web Token (JWT)
前端·json
AI老李1 天前
2026 年 Web 前端开发的 8 个趋势!
前端
里欧跑得慢1 天前
15. Web可访问性最佳实践:让每个用户都能平等访问
前端·css·flutter·web