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");
    }
}
相关推荐
Pniubi2 小时前
HashMap的扩容和树化边界
java·开发语言
gCode Teacher 格码致知3 小时前
Pandas教学-17:Series与Dataframe的关系
开发语言·python·pandas
发量惊人的中年网工3 小时前
分公司访问总部ERP慢怎么办?SD-WAN组网的排查与验收要点
服务器·开发语言·php
下页、再停留4 小时前
【C#桌面客户端系列学习-15】生成可视化图表之折线图、柱状图、饼状图
开发语言·c#
ShineWinsu4 小时前
对于JavaScript:操作元素的解析
开发语言·前端·javascript·面试·web·dom·元素
益莱储中国5 小时前
深度解析:RF 实验室从 5G迈向 6G 的过程中保持技术领先与设备升级的路径
开发语言·php
benchmark_cc6 小时前
Python 量化系统如何设计统一的数据访问接口:从策略解耦到数据层架构
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
const_qiu6 小时前
第四章 00:开篇 —— 从「会聊天」到「记得住、会干活、能协作」
java·开发语言·人工智能·python
Wang's Blog6 小时前
Java 项目实战: 交友项目 - 个人资料管理的更新接口实现与坑
java·开发语言·交友
CoderYanger7 小时前
Java EE 进阶:4.Spring Web MVC 入门(第一弹)
java·开发语言·前端·spring·面试·java-ee·mvc