继承
来源:互联网 发布:淘宝网818 编辑:程序博客网 时间:2024/06/04 20:07
7.1 类继承
1.可以使用一个已经存在的类作为新类的基础,已存在的类称为基类,(base class),
新类称为派生类(derived class) 派生类成员的组成如下:
自己声明中的成员,
基类的成员。
2. 要声明一个派生类,需要在类名后加入基类规格说明,基类规格说明由冒号和
后面跟着用作基类的类的名称组成,派生类被描述为直接继承自列出的基类。
3. 派生类被描述为扩展它的基类,因为它包含了基类的成员,加上在它自己声明
的任何附加功能。
4. 派生类不能删除它所继承的任何成员
5.除了特殊的类Object,所有的类都是派生类,即使他们没有基类规格说明,类object是唯一的非派生类,因为他是继承层次结构的基础
没有基类规格说明的类隐式的直接派生自类Object,不加基类规格说明只是指定Object为基类的简写,两种形式的语义等价
6. 一个类声明的基类规格说明中只能有一个单独的类,这称为单继承。
虽然类只能直接继承一个类,但继承的层次没有限制,也就是说,作为基类的类可以派生自另一个类,而它又派生自另外一个类,一直下去,直至最终到达Object。
7. 隐藏基类的成员
(1):要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称。
(2): 通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员,签名由名称和参数列表组成,但不包括返回类型
(3): 要让编译器知道你在故意隐藏继承的成员,使用new修饰符,没有他,程序可以成功编译,但编译器会警告你隐藏了一个继承的成员。
(4): 也可以隐藏静态成员
8. 基类访问
Console.WriteLine(“{0}”,base.Fieldl)
base.Fieldl: 基类访问
9. 使用基类的引用
派生类的实例由基类的实例加上派生类附加的成员组成,派生类的引用指向整个类对象,包括基类部分。
如果有一个派生类对象的引用,就可以获取该对象基类部分的引用,使用类型转换运算符吧该引用转换为基类类型,类型转换运算符放置在对象引用的前面,由圆括号括起的要转换成的类名组成。
10. 虚方法和覆写方法
基类引用调用派生类的方法,满足一下条件:
派生类的方法和基类的方法有相同的签名和返回类型。
基类的方法使用virtual标注
派生类的方法使用override标注
覆写标记override的方法
: 当使用对象基类部分的引用调用一个覆写的方法时,方法的调用被沿派生层次上溯执行,一直标记到为override的方法最派生版本。
如果在更高的派生级别有该方法的其他声明,但没有标记为override,那么他们不会被调用。
结论: 无论Print 是通过派生类调用还是通过基类调用,都是最派生类中的方法被调用,当通过基类调用时,调用被沿着继承层次向上传递。
11. 构造函数的执行:
要创建对象的基类部分,基类的一个构造函数被作为床架实例过程的一部分被调用
继承层次链中的每个类在执行它自己的构造函数整体之前执行它的基类的构造函数。
1.可以使用一个已经存在的类作为新类的基础,已存在的类称为基类,(base class),
新类称为派生类(derived class) 派生类成员的组成如下:
自己声明中的成员,
基类的成员。
2. 要声明一个派生类,需要在类名后加入基类规格说明,基类规格说明由冒号和
后面跟着用作基类的类的名称组成,派生类被描述为直接继承自列出的基类。
3. 派生类被描述为扩展它的基类,因为它包含了基类的成员,加上在它自己声明
的任何附加功能。
4. 派生类不能删除它所继承的任何成员
5.除了特殊的类Object,所有的类都是派生类,即使他们没有基类规格说明,类object是唯一的非派生类,因为他是继承层次结构的基础
没有基类规格说明的类隐式的直接派生自类Object,不加基类规格说明只是指定Object为基类的简写,两种形式的语义等价
6. 一个类声明的基类规格说明中只能有一个单独的类,这称为单继承。
虽然类只能直接继承一个类,但继承的层次没有限制,也就是说,作为基类的类可以派生自另一个类,而它又派生自另外一个类,一直下去,直至最终到达Object。
7. 隐藏基类的成员
(1):要隐藏一个继承的数据成员,需要声明一个新的相同类型的成员,并使用相同的名称。
(2): 通过在派生类中声明新的带有相同签名的函数成员,可以隐藏或掩盖继承的函数成员,签名由名称和参数列表组成,但不包括返回类型
(3): 要让编译器知道你在故意隐藏继承的成员,使用new修饰符,没有他,程序可以成功编译,但编译器会警告你隐藏了一个继承的成员。
(4): 也可以隐藏静态成员
8. 基类访问
Console.WriteLine(“{0}”,base.Fieldl)
base.Fieldl: 基类访问
9. 使用基类的引用
派生类的实例由基类的实例加上派生类附加的成员组成,派生类的引用指向整个类对象,包括基类部分。
如果有一个派生类对象的引用,就可以获取该对象基类部分的引用,使用类型转换运算符吧该引用转换为基类类型,类型转换运算符放置在对象引用的前面,由圆括号括起的要转换成的类名组成。
10. 虚方法和覆写方法
基类引用调用派生类的方法,满足一下条件:
派生类的方法和基类的方法有相同的签名和返回类型。
基类的方法使用virtual标注
派生类的方法使用override标注
覆写标记override的方法
: 当使用对象基类部分的引用调用一个覆写的方法时,方法的调用被沿派生层次上溯执行,一直标记到为override的方法最派生版本。
如果在更高的派生级别有该方法的其他声明,但没有标记为override,那么他们不会被调用。
结论: 无论Print 是通过派生类调用还是通过基类调用,都是最派生类中的方法被调用,当通过基类调用时,调用被沿着继承层次向上传递。
11. 构造函数的执行:
要创建对象的基类部分,基类的一个构造函数被作为床架实例过程的一部分被调用
继承层次链中的每个类在执行它自己的构造函数整体之前执行它的基类的构造函数。
0 0