一、继承核心概念
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:谁都不能用,子类也继承不了
二、继承三大优势(简答题满分)
- 代码复用:重复代码写在父类,子类直接继承
- 便于扩展:子类在父类基础上新增独有功能
- 统一规范:所有子类拥有父类统一的基础结构