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");
    }
}
相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
神仙别闹3 天前
基于C#+MySQL实现(WinForm)个人聊天室软件
c#
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
kybs19913 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust
此生决int3 天前
深入理解C++系列(20)——C++11(下)
开发语言·c++
CoderYanger3 天前
A.每日一题:835. 图像重叠
java·开发语言·程序人生·leetcode·面试·职场和发展·学习方法
伞伞悦读3 天前
【第37期】Python JSON 与配置详解:序列化、反序列化、嵌套结构和配置文件
开发语言·python·json