C# 封装与继承

封装与继承的概念区别

封装(Encapsulation)是将数据和操作数据的方法绑定在一起,隐藏内部实现细节,仅暴露必要接口。继承(Inheritance)是子类复用父类的属性和方法,并可以扩展或重写。

封装示例代码

csharp 复制代码
public class BankAccount
{
    private decimal _balance; // 私有字段,外部无法直接访问

    // 公开方法提供受控访问
    public void Deposit(decimal amount)
    {
        if (amount > 0)
            _balance += amount;
    }

    public decimal GetBalance() => _balance;
}

继承示例代码

csharp 复制代码
public class Animal // 基类
{
    public void Eat() => Console.WriteLine("Eating...");
}

public class Dog : Animal // 派生类
{
    public void Bark() => Console.WriteLine("Woof!");
}

主要区别对比

封装特点

  • 通过private/protected修饰符控制访问权限
  • 使用属性(get/set)管理字段访问
  • 核心目标是数据保护和接口简化

继承特点

  • 通过:符号实现类继承
  • 支持方法重写(virtual/override
  • 核心目标是代码复用和多态实现

组合使用示例

csharp 复制代码
public class Vehicle // 父类
{
    protected int _speed; // 受保护字段(封装)
    public virtual void Move() => Console.WriteLine("Moving");
}

public class Car : Vehicle // 子类(继承)
{
    private string _model; // 私有字段(封装)
    public Car(string model) => _model = model;

    public override void Move() 
    {
        _speed = 60; // 访问继承的受保护字段
        Console.WriteLine($"{_model} driving at {_speed}km/h");
    }
}
相关推荐
EasyGBS5 分钟前
从接入到稳定播放:无插件直播H5视频流媒体播放器EasyPlayer.js如何撑起Web端流媒体
开发语言·前端·javascript
FfHUCisI7 分钟前
GMP 调度器:Go 并发的心脏是如何跳动的
开发语言·golang·php
Java小白笔记14 分钟前
Java 实现阿里云 OSS 文件上传链路:普通上传、秒传、分片与断点续传
java·开发语言·数据库·spring·阿里云
传奇开心果编程15 分钟前
【Rust入门知识点学与练】第9课:Vec 动态数组
开发语言·学习·rust
卢锡荣19 分钟前
单芯掌控多口互联|乐得瑞 LDR6020 PD3.1 多通道 Type‑C 控制 SOC 芯片
c语言·开发语言
2333!!!!!19 分钟前
rocket新手一些常见问题
java·开发语言
yume_sibai20 分钟前
02-Rust 所有权与借用深入解析(底层原理 + 借用检查器 + 生命周期 + 内部可变性)
开发语言·后端·rust
xxwxx__23 分钟前
深入理解 C++ STL:stack、queue 与 deque 从使用到底层实现全解析
开发语言·c++·算法
Highcharts.js23 分钟前
甘特图纵向任务、横向时间显示图表可视化开发|Highcharts甘特图示例
开发语言·前端·javascript·可视化·甘特图·数据可视化·highcharts
郝学胜-神的一滴31 分钟前
C++11 工程级应用 08:Lambda表达式与Tuple元组
开发语言·jvm·c++·python·程序人生·开源