九、面向对象 之 继承
创始人
2024-03-16 11:38:34
0

文章目录

  • 1、继承特点
  • 2、继承语法
  • 3、里氏替换原则:is / as
    • 3.1、概念
    • 3.2、`is` 和 `as` 关键字
  • 4、继承中的构造函数:base
    • 4.1、要点
    • 4.2、base 关键字
  • 5、object 和 装箱拆箱
    • 5.1、object
    • 5.2、装箱拆箱
  • 6、密封类:sealed

1、继承特点

  • 单根性:子类只能有一个父类
  • 传递性:子类可以间接继承父类的父类

2、继承语法

class 子类 : 父类
{// ...
}
  • 栗子
// 超类:人
class Person
{public string Name;public int Age;public void Speak(){Console.Write("我叫{0},今年{1}岁。", Name, Age);}
}// 子类:老师(老师也是人,具备人的特征和行为,故直接继承超类Person,省略重复的编码)
class Teacher : Person
{public string Subject; // 教学科目// 上课public void ClassBegin() {Speak();Console.WriteLine("我是你们的{0}老师,现在开始上课。", Subject);}
}// 某方法内↓↓↓
Teacher tec = new Teacher();
tec.Name = "Mr.Bai";
tec.Age = 24;
tec.Subject = "C/C++/Java/C#";
tec.ClassBegin(); // 我叫Mr.Bai,今年24岁。我是你们的C/C++/Java/C#老师,现在开始上课。

3、里氏替换原则:is / as

3.1、概念

  • 任何父类出现的地方,子类都替代
  • 语法表现:父类对象装载子类对象(父类声明,子类创建
  • 作用:方便对象管理和存储
// 使用2里面的栗子
Person person = new Teacher();
// 但是父类不能直接点子类的特征和行为,请继续看3.2

3.2、isas 关键字

  • is:判断一个对象是否是指定类型的对象
    • 返回 bool
    • 栗子:Console.WriteLine(tec is Person); // True
  • as:将一个对象转换为指定类对象
    • 返回 指定类型对象 or null
    • 栗子:Teacher teacher = person as Teacher;
  • is 和 as 通常是配合使用的
if(person is Teacher){// 第一种写法Teacher t = person as Teacher;t.ClassBegin();// 第二种写法(person as Teacher).ClassBegin();
}

4、继承中的构造函数:base

4.1、要点

除了 关键字 不同,其他都是各门语言相通的

  • 子类可以通过 base 关键字 调用父类构造

4.2、base 关键字

  • 父类有无参构造子类构造则可不写 base,否则必写,不然怎么先实例化父类呢
// 超类:人
class Person
{public string Name;public int Age;// 父类构造public Person(string name, int age){// ...}
}// 子类:老师
class Teacher : Person
{public string Subject; // 教学科目// 子类构造public Teacher(string name, int age, string subject) : base(name, age){// ...}
}

5、object 和 装箱拆箱

5.1、object

  • 关键字:object,是 Object 的别名
    • 所有类的基类
  • 作用
    • 可以用里氏替换原则,用 object 装所有对象
    • 可以用来表示不确定的形参类型

5.2、装箱拆箱

  • 装箱:用 object 存值类型
    • 把值类型用引用类型存储,栈内存会迁移到堆内存
  • 拆箱:把 object 转回值类型
    • 把引用类型的值取出来,堆内存会迁移到栈内存
  • 利弊
    • 好处:不确定类型可以方便值的存储和传递
    • 坏处:存在内存迁移,增加性能消耗

6、密封类:sealed

  • 关键字:secled
  • 作用:修饰类,让类无法再继承(类似java的final)

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...