第四章 面向对象编程进程(C#)

(一)类的继承与多态

1、继承

任何类拥有它继承的类的所有成员。在面向对象编程中,被继承的类称为父类或基类。C#中提供了类的继承机制,但只支持单继承,而不继承多重继承,即在C#中一次只允许继承一个类,不能同时继承多个类

(1)使用继承

继承的基本思想是基于某个基类的扩展,制定出一个新的派生类(子类),派生类可以继承基类原有的属性和方法,也可以增加原来基类所不具备的属性和方法,或者重写几类中的某些方法。

在C#中使用“:”来标识两个类的继承关系。在派生类不能继承基类中所定义的private成员,只能继承基类的public成员和protected成员。

(2)base关键字

base关键字用于从派生类中访问基类的成员,它主要有两种使用形式,分别如下。

调用基类上已被其他方法重写的方法。

指定创建派生类实例时应调用的基类构造函数。

基类访问只能在构造函数、实例方法或实例属性访问器中进行,因此,从静态方法使用base关键字是错误的。

(3)继承中构造函数与析构函数

在进行类的继承时,派生类构造函数会隐式地调用基类的无参构造函数,但是,如果基类也是从其他派生的,C#会根据层次结构找到最顶层的基类,并调用基类的构造函数,然后依次调用各级派生类的构造函数。析构函数的执行顺序正好与构造函数相反。

(二)多态

动态是面向对象编程的基本特征之一,它使得派生类的实例可以直接赋予基类的对象,然后直接通过这个对象调用派生类的方法。在C#中,类的多态是通过在派生类中重写基类的虚方法来实现的。

1、虚方法的重写

在类的方法前面加上关键字virtual,则称该方法为虚方法。通过虚方法重写,可以实现在程序运行过程确定调用的方法。重写(还可以称为覆盖)加上在派生类中将基类的成员方法的名称保留,重写成员方法的实现内容,更改成员方法的存储权限或者修改成员方法的返回值类型。

2、抽象类和抽象方法

如果一个类不与具体的事物相联系,只是表达一种抽象的概念或行为,仅仅是作为其派生类的一个基类,这个类可以被声明为抽象类。在抽象类中声明方法时,如果加上abstract关键字,则为抽象方法。(在类中主要有一个抽象方法,这个类也得被声明为抽象类)。

抽象类主要用来提供多个派生类可共享的基类的公共定义,它与非抽象类的主要区别如下:

  抽象类不能实例化;

  抽象类中可以包含抽象成员,但非抽象类中不可用;

  抽象类不能被密封

抽象类的具体语法:

访问修饰符  abstract class 类名:基类或接口

{

  //类成员

}

抽象方法的注意事项:

  抽象方法必须声明在抽象类中。

  声明抽象方法时,不能使用virtual、static和private修饰符。

当从抽象类派生一个非抽象类时,需要在非抽象类中重写抽象方法,以提供具体的实现,重写抽象方法时使用override关键字。

3、密封类和密封方法

为了避免滥用继承,C#提出来密封类的概念。密封类可以限制扩展性,如果密封了就不能继承该类;如果密封了某个成员,则派生类不能重写该成员的实现。格式为:

访问修饰符  sealed class 类名:基类或接口

{

  //密封类的成员

}

如果类的方法声明中包含sealed修饰符,则该方法为密封方法。密封方法只能用于对基类的虚方法进行实现,因此,声明密封方法时,selead修饰符总是与override修饰符同时使用。

总结

1.什么是继承?其作用是什么?

继承是子类可以沿用父类的某些行为和特征,其作用是代码重用

2.继承的特性有 传递性 、 单根性 、 成员的访问性 。

3.在C#中,派生类会先调用基类的无参构造方法,在调用自身的构造方法。

4.在C#子类中,可以使用 this 关键字访问本类成员,使用 base 关键字访问父类成员。

5. Object 类是所有类的父类。

6.请列举出C#中5种访问修饰符并说明其作用?

public:公共的,访问不受限制;

private:私有的,只能在本类内部访问;

protected:受保护的,只能在本类及其子类访问。

internal:内部的,只限于本项目内成员访问;

prodected internal:内部保护的,只限于本项目或子类访问。

7.类的默认访问修饰符是 internal ,类的成员的默认访问修饰符是 private 。

8.多态的意思是 多种形态 。

9.在C#中,子类使用 new 关键字来达到隐藏父类成员的目的。

10.多态的实现方式有哪两种?隐藏父类方法和方法重写。

11.方法重写的特点?与重载的区别是?

方法重写:发生在父子类中,父子类方法的返回值类型、方法名和参数必须完全相同,子类方法的可访问性不能低于父类方法;

方法重载:同一个类中,方法名相同,参数的个数或类型不同;(与返回值无关);

12.虚方法的关键字是 virtual ,重写的关键字是 override 。

13.密封类的关键字是 sealed ,其主要作用是 防止派生子类 ,密封方法的作用是 不允许子类再次重写 。

14.C#中使用 abstract 关键字类定义抽象类?

15.抽象类的特点?

1)抽象类可以不包含抽象方法,但抽象方法必须包含在抽象类中;

2)抽象方法不允许有方法体;

3)子类继承于抽象类时必须重写抽象类中所有的抽象方法,除非子类也是抽象类。4)抽象类不允许直接实例化,只能实例化其非抽象子类对象。

16.抽象方法与虚方法的区别?

抽象方法:使用abstract修饰,只能定义在抽象类中,不允许有方法体,子类必须重写;虚方法:使用virtual关键字修饰,可以定义在非密封类中,必须有方法体,可以重写。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值