第六章 继承和多态

1.继承有哪些特性:

  1.单根性    2.传递性

2.父类的哪些成员可以被继承?

  私有成员不能被继承,父类的构造

3.继承:

  在C#中,如果一个类后面通过冒号又跟了另外一个类,那么我们就称冒号前面的类为子类,

冒号后面的类为父类,这种书写方式放映出来的关系就称为类的继承关系

4.子类:派生类   父类:基类或者超类

5.满足什么条件的类可以使用继承?

  满足is a关系的两个类可以使用继承

  例如:经理 is a 员工

6.如果new一个子类对象,那么如下操作流程:

  1.先 定位到子类对应构造函数,没有执行子类的方法体

  2.转向了父类的无参构造函数,执行父类构造方法体

  3.转向了子类的方法体继续执行

7.如果在子类构造中,没有使用base显示调用父类的构造,那么系统也会自动调用父类的无参构造:

  1.base代表父类对象,如果base(),调用父类的构造函数

  2.base代表的是方法调用,是不需要参数类型的

8.通过base调用父类构造函数注意点:

  1.通过base调用父类构造函数只能书写在子类的构造后

  2.通过base调用父类构造函数参数顺序和父类的构造参数一致

注意:方式一:new Student("张靓颖",20);

和方式二:new Student

{

Name="张靓颖",Age=20

}区别?

最终都能实现对类中的属性赋值。

但是赋值的原理不同,

方式一:直接调用该类的带参构造赋值。

1.先通过无参构造创建出类的对象

2.对象名.属性名的方式赋值

9.访问修饰符

  public:在任何位置都可以访问,甚至是跨程序集都可以访问。

  private:只能当前类的花括号中访问。

  protected:只能在当前类,当前类的子类,子类的子类(孙子类)中可以访问。

10.继承的传递性

  如果一个类B继承自类A,而类C又继承类B,那么类C也可以访问到类A中非私有成员

11.继承的单根性

  在很久很久以前,有一个叫C++的家伙,他是支持多继承的语言,突然有一天,10个程序员用多继承,有9个都用错了,后续的Java和C#语言因此不再支持多继承。

在C#中,一个类只能有一个父类,C#和Java都不支持多继承。要想使用多继承,那么请您使用接口。。

遍历窗体上所有的控件,判断是不是文本框

foreach(Control c in this.Controls)

{

if(c is TextBox)

{

((TextBox)c).Text="";

}

}

is a 判断一个对象是否是某个类型。

12.继承的价值

  1.模拟现实世界的关系

  2.便于重用和扩展已彻底测试的代码,且无需修改

  3.结构更清晰

13.多态

  不同的对象对于同一个操作,做出的响应不同,那么这种情况在面向对象编程中就称为多态

14.使用多态的目的?

  使用多态就是为了统一调用

15.实现多态三种方式:

  方式一:通过虚方法实现多态

  实现多态的步骤

  1.在父类中通过virtual关键字定义一个虚方法

  2.在子类中通过override关键字对父类中的虚方法进行重写

  3.调用的时候,调用的是子类的方法

虚方法实现多态

通过在普通类Person中用Virtual关键字定义虚方法SayHello(),然后在子类Student中通过override关键字对父类的SayHello()方法进行重写。

时间: 2025-01-12 16:50:39

第六章 继承和多态的相关文章

《Entity Framework 6 Recipes》中文翻译系列 (30) ------ 第六章 继承与建模高级应用之多对多关联

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第六章  继承与建模高级应用 现在,你应该对实体框架中基本的建模有了一定的了解,本章将帮助你解决许多常见的.复杂的建模问题,并解决你可能在现实中遇到的建模问题. 本章以多对多关系开始,这个类型的关系,无论是在现存系统还是新项目的建模中都非常普遍.接下来,我们会了解自引用关系,并探索获取嵌套对象图的各种策略.最后,本章以继承的高级建模和实体条件结束. 6-1  获取多对多关联中的链接表 问题

《Java从小白到大牛》之第12章 继承与多态

<Java从小白到大牛>纸质版已经上架了!!! 类的继承性是面向对象语言的基本特性,多态性前提是继承性.Java支持继承性和多态性.这一章讨论Java继承性和多态性. Java中的继承 {#java} 为了了解继承性,先看这样一个场景:一位面向对象的程序员小赵,在编程过程中需要描述和处理个人信息,于是定义了类Person,如下所示: //Person.java文件 package com.a51work6; import java.util.Date; public class Person

《Entity Framework 6 Recipes》中文翻译系列 (37) ------ 第六章 继承与建模高级应用之独立关联与外键关联

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-13  在基类中应用条件 问题 你想从一个已存在的模型中的实体派生一个新的实体,允许基类被实例化. 解决方案 假设你有如图6-20所示的模型. 图6-20 包含Invoice实体的模型 这个模型只包含一个单独的实体Invoice(发货单).我们想从Invoice派生一个新的实体,它表示删除掉的发货单.这将允许我们以更清晰的业务逻辑来分别对有效的发货单和已删除掉的发货进行不同的操作.按下面

《Entity Framework 6 Recipes》中文翻译系列 (35) ------ 第六章 继承与建模高级应用之TPH继承映射中使用复合条件

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-11  TPH继承映射中使用复合条件 问题 你想使用TPH为一张表建模,建模中使用的复杂条件超过了实框架能直接支持的能力. 解决方案 假设我们有一张Member表,如图6-15所示.Member表描述了我们俱乐部的会员信息.在我们的模型中,我们想使用TPH为派生类,AdultMember(成人会员).SeniorMember(老年人会员)和TeenMember(青少年会员)建模. 图6-

第七章 继承和多态

1 继承 1.1 基类与派生类 C#中的类不支持多继承.只有在类和接口之间可以实现多继承. public static void Main() { Business c1 = new Business(); c1.Name = "李明"; c1["办公电话"] = "07188888888"; c1.Output(); ClassMate c2 = new ClassMate(); c2.Name = "张鹏"; c2.Bir

《Entity Framework 6 Recipes》中文翻译系列 (33) ------ 第六章 继承与建模高级应用之TPH与TPT (2)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-8  嵌套的TPH建模 问题 你想使用超过一层的TPH继承映射为一张表建模. 解决方案 假设你有一张员工(Employee)表,它包含各种类型的员工,比如,钟点工,雇员.如图6-10所示. 图6-10 包含各种类型的员工表 Employee表包含钟点工,雇员,提成员工,这是雇员下面的一个子类型.按下面的步骤,使用派生类型HourlyEmployee,SalariedEmployee和Sa

《Entity Framework 6 Recipes》中文翻译系列 (32) ------ 第六章 继承与建模高级应用之TPH与TPT (1)

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-6  映射派生类中的NULL条件 问题 你的表中,有一列允许为null.你想使用TPH创建一个模型,列值为null时,表示一个派生类型,不为null时,表示另一个派生类型. 解决方案 假设你有一张表,描述医学实验药物.这张表包含一列指示该药是什么时候批准生产的.药在批准生产之前都被认为是实验性的.一但批准生产,它就被认为是药物了.我们就以图6-7中Drug表开始我们这一小节的学习. 图6

《Entity Framework 6 Recipes》中文翻译系列 (36) ------ 第六章 继承与建模高级应用之TPC继承映射

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-12  TPC继承映射建模 问题 你有两张或多张架构和数据类似的表,你想使用TPC继承映射为这些表建模. 解决方案 假设我们有如图6-18所示的表. 图6-18 表Toyota和BMW有相似的结构,它们可以成为派生至实体Car的派生类型 在图6-18中,表Toyota和BMW有相似的架构(Schema),并描述类似的数据.BMW表只多了额外的一列,它用一bit值来指示对应的实例是否具有避

《Entity Framework 6 Recipes》中文翻译系列 (34) ------ 第六章 继承与建模高级应用之多条件与QueryView

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-10  创建一个多条件过滤 问题 你想使用多个条件为实体过滤表中的行. 解决方案 假设你有一张处理网站订单的表,如图6-13所示. 图6-13 表WebOrder包含网站订单的信息 假设我们有这样一个业务需求,WebOrder中的实例为,2012年以后的,2010年到2012年之间未删除的,2010年以前的订单金额大于200美元的.这样的复杂过滤条件不能使用映射详细信息窗口中有限制的条件