C# 继承基础详解(代码实战+权限规则)

一、继承核心概念

1. 继承作用

实现代码复用,子类可以直接复用父类已定义的属性和方法,避免重复代码。

2. 继承名词

  • 父类 / 基类:被继承的类(当前 People

  • 子类 / 派生类:继承别人的类(当前 Student

3. 继承语法

子类名 : 父类名

复制代码
public class Student : People
{

}

4. C# 继承硬性规则

  • 单继承机制 :一个子类只能直接继承一个父类

  • 支持链式继承:A继承B、B继承C,允许多层继承

  • 所有类默认隐式继承 object(系统顶级基类),不写继承符号默认继承object


二、代码执行逻辑解析

1. 父类 People 成员组成

复制代码
public class People
{
    // 公开成员:可被继承、可外部实例访问
    public int Id { get; set; }
    public string Name { get; set; }
    public string Address { get; set; }

    // 私有成员:仅限父类内部使用,【不能被继承】
    private int Age = 1000; 

    // 受保护成员:仅限本类、子类使用,外部实例无法访问
    protected int CC { get; set; }

    // 公开方法:子类可继承调用
    public void F1()
    {
        Console.WriteLine( "父类的F1方法");
    }
}

2. 子类 Student 功能

子类无任何重复代码,直接复用父类所有可继承成员,同时扩展自己的方法 F2

复制代码
public class Student:People
{
    public void F2()
    {
        // 直接使用父类 public、protected 成员
        Console.WriteLine(Name+":"+Id+":"+CC);
    }
}

3. 主方法调用逻辑

复制代码
Student s1 = new Student();
s1.Name = "Test";  // 继承父类公开属性
s1.Address = "s";  // 继承父类公开属性
s1.F1();           // 调用继承的父类方法

子类对象可以直接调用父类可继承的属性和方法,完全实现代码复用。


三、继承权限核心规则(必考)

访问修饰符 能否被子类继承 外部实例能否访问 使用范围
public ✅ 可以 ✅ 可以 本类、子类、外部所有位置
protected ✅ 可以 ❌ 不可以 本类、子类内部,外部无法调用
private ❌ 不可以 ❌ 不可以 仅当前类内部使用

四、高频易错考点

  • 父类 private 私有成员绝对不能被继承,子类无法获取、无法使用

  • 父类 protected 成员仅供子类内部使用,不能通过对象实例访问

  • C# 不支持多继承(一个子类不能同时继承多个父类),仅支持单继承+链式继承

  • 所有类的顶级父类都是 object,是C#中所有类型的最终基类

  • 子类可以继承父类成员,同时可以扩展自己的专属成员,实现功能拓展

五、简答题满分总结

1. 继承的意义?

继承可以实现代码复用,减少冗余代码,子类可以复用父类的公开和受保护成员,同时拓展自身功能,提升代码的复用性与扩展性。

2. private 和 protected 成员的继承区别?

private 私有成员仅能在当前类内部使用,无法被子类继承;protected 受保护成员可以被子类继承并在子类内部使用,但不能通过外部对象实例访问。

例子:一套最标准、考试满分、可直接运行的【继承 + 子类扩展】完整版案例

cs 复制代码
using System;

namespace InheritDemo
{
    // 父类:人类
    public class People
    {
        public string Name { get; set; }
        public int Age { get; set; }

        // 公开方法:所有子类继承
        public void SayHello()
        {
            Console.WriteLine("父类方法:大家好");
        }

        // 受保护方法:只能子类用,外部不能用
        protected void ShowInfo()
        {
            Console.WriteLine($"姓名:{Name},年龄:{Age}");
        }
    }

    // 子类:学生类 继承 People
    // 特点:拥有父类所有 public/protected 成员,不用重写代码
    public class Student : People
    {
        // 子类【扩展自己独有的属性】
        public string StudentId { get; set; }

        // 子类【扩展自己独有的方法】
        public void Study()
        {
            // 子类可以直接使用父类属性
            Console.WriteLine($"{Name} 正在学习");

            // 子类可以调用父类 protected 方法
            ShowInfo();
        }
    }

    // 子类:老师类 继承 People
    public class Teacher : People
    {
        public string Subject { get; set; }

        public void Teach()
        {
            Console.WriteLine($"{Name} 正在讲课");
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            // 子类对象 拥有父类所有功能 + 自己扩展的功能
            Student s = new Student();
            s.Name = "张三";   // 继承父类
            s.Age = 18;        // 继承父类
            s.StudentId = "2026001"; // 自己独有

            s.SayHello(); // 调用父类方法
            s.Study();    // 调用子类扩展方法


            Teacher t = new Teacher();
            t.Name = "王老师";
            t.Subject = "数学";
            t.Teach();
        }
    }
}

一、继承扩展核心考点(必考)

1. 继承带来的效果

  • 子类自动拥有父类 public / protected 的属性、方法
  • 不用重复写代码 → 代码复用

2. 子类扩展的意义

  • 父类放通用代码(所有人都有的:姓名、年龄、打招呼)
  • 子类放独有代码(学生:学号、学习;老师:科目、讲课)
  • 符合面向对象:复用 + 拓展

3. 权限再次总结(继承最容易错)

  • public:子类能用、外部对象也能用
  • protected:子类能用、外部对象不能用
  • private:谁都不能用,子类也继承不了

二、继承三大优势(简答题满分)

  1. 代码复用:重复代码写在父类,子类直接继承
  2. 便于扩展:子类在父类基础上新增独有功能
  3. 统一规范:所有子类拥有父类统一的基础结构
相关推荐
techdashen1 小时前
你想在 Rust 中实现动态库热重载?
开发语言·chrome·rust
不会C语言的男孩1 小时前
C++ Primer 第5章:语句
开发语言·c++
酉鬼女又兒1 小时前
零基础入门计算机网络:从基本概念到核心交换技术
开发语言·计算机网络·考研·职场和发展·php
爱喝水的鱼丶1 小时前
SAP-ABAP:SAP 简单报表输出开发系列(共6篇)第三篇:SAP ALV 报表样式定制:字段布局与交互功能配置
服务器·开发语言·学习·交互·sap·abap
chao1898441 小时前
基于SIFT和SURF特征的图像配准(MATLAB)
开发语言·matlab
摇滚侠1 小时前
JDBC 基础到高级一套通关!基础篇 00-15
java·开发语言·数据库
小L写Java1 小时前
第三章:Java 内存模型 (JMM) 与运行时数据区
java·jvm
m0_744724931 小时前
Tomcat相关
java·tomcat
foundbug9991 小时前
最优化问题的外点罚函数法与内点罚函数法-MATLAB实现
开发语言·matlab