1.类继承

  通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展。

  1.可以使用- 一个已经存在的类作为新类的基础。.已存在的类称为基类(baseclass),新类称为派生类(derivedclass)。派生类成员的组成如下:

    (1)自己声明中的成员。

    (2)基类的成员.

  2.要声明一个派生类,需要在类名后加入基类规格说明。基类规格说明由冒号和后面跟着用作基类的类的名称组成。派生类被描述为直接继承自列出的基类。“

  3.派生类被描述为扩展它的基类,因为它包含了基类的成员,加上在它自己的声明中的任何附加功能。

  4. 派生类不能删除它所继承的任何成员。

2.所有类都派生自Object类

  除了特殊的类object,所有的类都是派生类,即使它们没有基类规格说明。类object是唯一的非派生类,因为它是继承层次结构的基础。
  没有基类规格说明的类隐式地直接派生自类object.不加基类规格说明只是指定object为基类的简写。这两种形式是语义等价的。 

  关于类继承的其他重要内容如下:

    1.一个类声明的基类规格说明中只能有- 一个单独的类。这称为单继承。

    2.虽然类只能直接继承- 一个基类,但继承的层次没有限制。也就是说,作为基类的类可以派生自另外- 一个类,而它又派生自另外一个类,直下去,直至最终到达object.

3.隐藏基类的成员

虽然派生类不能删除它继承的任何成员,但它可以隐藏它们。

  1.要隐藏- 一个继承的数据成员,需要声明- 一个新的相同类型的成员,并使用相同的名称。

  2.通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员。请记住,签名由名称和参数列表组成,但不包括返回类型。

  3.要让编译器知道你在故意隐藏继承的成员,使用new修饰符。没有它,程序可以成功编译,但编译器会警告你隐藏了一个继承的成员。

  4.也可以隐藏静态成员。

4.基类访问

5.虚方法和覆盖写法

  在上- 一节看到,当使用基类引用访问派生类对象时,得到的是基类的成员。虚方法可以使基类的引用访问“升至”派生类内。

  可以使用基类引用调用派生类(derivedclass) 的方法,只需满足下面的条件:

    1.派生类的方法和基类的方法有相同的签名和返区类型。

    2.基类的方法使用virtua1标注。

    3.派生类的方法使用override标注。

  其他关于virtual和override修饰符的重要信息如下:

    1.覆写和被覆写的方法必须有相同的可访问性。换一种说法,被覆写的方法不能是private等,而覆写方法是public。

    2.不能覆写static 方法或非虚方法。口方法、属性和索引(在前-章阐述),以及称为事件(将在后面阐述) 的另一种成员类型,它们都可以被声明为virtua1和override.

6.覆写标记为overridede方法

  覆写方法可以在继承的任何层次出现。

    1.当使用对象基类部分的引用调用- 一个覆写的方法时,方法的调用被沿派生层次上溯执行,直到标记为override的方法的最派生(most-derived) 版本。

    2.如果在更高的派生级别有该访法的其他声明,但没有被标记为override,那么它们不会被调用。

7.构造函数的执行

  1.要创建对象的基类部分,基类的- 一个构造函数被作为创建实例过程的- 一部分被调用。

  2.继承层次链中的每个类在执行它自己的构造函数体之前执行它的基类的构造函数。

  例如,下面的代码展示了类MyDerivedClass和它的构造函数的声明。当该构造丽数被调用时,它在执行自己的方法体之前调用无参数的构造函数MyBaseClass( )。

8.构造函数初始化语句

  默认情况下,在对象被构造时,基类的无参数构造函数被调用。但构造函数可以被重载,所以基类可能有- 一个以上的构造函数。如果希望派生类使用- 一个指定的基类构造函数而不是无参数构造函数,必须在构造函数初始化语句中指定它。

  有两种形式的构造函数初始化语句:

    1.第- 一种形式使用关键字base并指明使用哪- 一个基类构造函数。

    2.第二种形式使用关键字this 并指明应该使用当前类的哪- 一个另外的构造函数。

  基类构造初始化语句放在冒号后面,冒号紧跟着类的构造函数声明的参数列表。构造函数初始化语句由关键字base和要调用的基类构造函数的参数列表组成。

  例如:

  下面的代码展示了类MyDerivedClass的构造函数。

    1.构造函数初始化语句指明要使用的基类构造函数是有两个参数的那个。第一个参数是一个string,第二个参数是- 一个int。

    2.在基类参数列表中的参数必须在类型和顺序方面匹配已定的基类构造函数的参数列表。

C#图解第七章:类和继承的更多相关文章

  1. C#图解教程 第七章 类和继承

    类和继承 类继承访问继承的成员所有类都派生自object类屏蔽基类的成员基类访问使用基类的引用 虚方法和覆写方法覆写标记为override的方法覆盖其他成员类型 构造函数的执行 构造函数初始化语句类访 ...

  2. C#图解教程读书笔记(第7章 类和继承)

    1.所有的类都继承自object 2.如何隐藏基类的成员 要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称. 通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承 ...

  3. C#图解教程学习笔记——类和继承

    一.屏蔽基类的成员所有类都派生自object类.虽然类只能直接继承一个基类,但继承的层次没有限制.虽然派生类不能删除它继承的任何成员,但可以用与基类同名的成员来屏蔽(mask)基类成员.1. 要屏蔽一 ...

  4. 《Effective Python》笔记——第3章 类与继承

    一.尽量用辅助类来维护程序的状态 如下,用字典存储简单数据 class SimpleGradebook(): def __init__(self): self.__grades = {} def ad ...

  5. 第七章 类(class)7.1 笔记

    最好不要把对象的定义和类的定义放在一起,这么做无异于把两种不同实体的定义混在了一条语句里,一会定义类,一会又定义变量,显然这是一种不被建议的行为. 类的定义最后要加上分号(:) 成员函数的声明必须放在 ...

  6. C#图解:第七章

    C#图解第七章:类和继承 1.类继承 通过继承我们可以定义一个新类,新类纳入一个已经声明的类并进行扩展. 1.可以使用- 一个已经存在的类作为新类的基础..已存在的类称为基类(baseclass),新 ...

  7. 【C++】《C++ Primer 》第七章

    第七章 类 一.定义抽象数据类型 类背后的基本思想:数据抽象(data abstraction)和封装(encapsulation). 数据抽象是一种依赖于接口(interface)和实现(imple ...

  8. [Java编程思想] 第七章 复用类

    第七章 复用类 第一种方法非常直观:只需在新的类中产生现有类的对象(组合). 第二种方法更细致一些:它按照现有类的类型来创建新类(继承). 7.1 组合语法   只需将对象引用置于新类中即可. cla ...

  9. ArcGIS API for JavaScript 4.2学习笔记[24] 【IdentifyTask类】的使用(结合IdentifyParameters类)(第七章完结)

    好吧,我都要吐了. 接连三个例子都是类似的套路,使用某个查询参数类的实例,结合对应的Task类,对返回值进行取值.显示. 这个例子是Identify识别,使用了TileLayer这种图层,数据来自Se ...

随机推荐

  1. 深入FM和FFM原理与实践

    FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩.美团点评技术团队在搭建DSP的过 ...

  2. dygod.net

    # -*- coding: utf-8 -*- import scrapy from scrapy.linkextractors import LinkExtractor from scrapy.sp ...

  3. docker mysql 数据库乱码

    创建 mysql 时,需要加上编码,不然会乱码: docker run --name mysql01 -p : -e MYSQL_ROOT_PASSWORD=pwd123 -d mysql:5.5 - ...

  4. 洛谷P1605 迷宫 (DFS)

    题目背景 迷宫 [问题描述] 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和 终点坐标,问: 每个方格最多经过1次,有多少种从起点坐标到终点坐标的方案.在迷宫 中移动有上下 ...

  5. IE缓存清除

    原文转载自:http://blog.csdn.net/whatday/article/details/7566925 首先: 在  stdafx.h中要加入: #include "atlba ...

  6. java面试题汇总(有的题无视即可,没什么实际用途)

    相关概念 面向对象的三个特征 封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象. 多态的好处 允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消 ...

  7. Docker OpenvSwitch 介绍 or 工作原理

    Docker OpenvSwitch Network 介绍 什么是OpenVSwich OpenvSwich Network:属于第三方网络项目,可以理解为是一个标准的交换机协议. OpenvSwic ...

  8. Docker Swarm redis 集群搭建

    Docker Swarm redis 集群搭建 环境1: 系统:Linux Centos 7.4 x64 内核:Linux docker 3.10.0-693.2.2.el7.x86_64 Docke ...

  9. Linux 查看磁盘读写速度IO使用情况

    # 查看io进程 命令:iotop 注:DISK TEAD:n=磁盘读/每秒              DISK WRITE:n=磁盘写/每秒. 注:标黄的可查看磁盘的读写速率,下面可以看到使用的io ...

  10. SSM-网站后台管理系统制作(2)---SSM基本工作原理

    SSM基本工作原理 讲解网站:https://www.w3cschool.cn/wkspring/dcu91icn.html 构建基本工作环境: mysql eclipse(tomcat8.0) Hb ...