面向对象编程——继承和多态

 

1.掌握继承的定义和使用

2.掌握方法重写和隐藏的使用

3.掌握密封类和密封方法的使用

本章重点:

1.继承的实现

2.多态的实现

本章难点: 

1.多态中方法的调用

回顾重点:

1. 对象和类

2. 方法

a) 构造方法

b) 实例方法和静态方法

c) 重载

内容讲解:

在第二章中,我们已经对面向对象编程思想有所了解,能够使用类和对象来思考如何解决遇到的问题。在现实生活中,人与人之间都会有一定的关系,如去商店购物会产生收银员和顾客之间的关系,这种关系特别的短暂;然而还存在着很多持久的关系,如父子关系。人与人之间不仅会存在关系,也会存在对于同一件事情有着不同处理方式的差异,即使是在父子之间也是如此。在面向对象中,对象也需要建立持久的关系。

从本章开始,将学习对象间的关系,而这种父子关系在面向对象中称之为继承,继承可以实现代码复用。对于同一件事情的不同处理方式在面向对象中称之为多态,多态可以提高软件的可扩展性。在本章中,我们将继续深入学习面向对象三大特征中的继承和多态。

一、继承

1、引入:

可能我们大多数人的童年都是《西游记》一起陪伴度过的,对于西游记里面的人物再清楚不过了。《西游记》中唐僧收孙悟空、猪八戒和沙和尚为徒弟,分别定义行者类、使者类和罗汉类。通过对比,发现存在代码冗余,即生成了大量的重复代码,使后期的维护工作变得异常繁琐。为提高代码的可重用性,减少代码冗余,效仿在多个方法中有很多相同代码时,为了提高开发效率,将公共代码提炼成一个方法。在类中也相似,我们可提取其中相同的属性和方法,作为一个独立的类,此类在行者、使者和罗汉类中被“调用”,此时,只需在每个子类中定义自己特定的成员即可。修改后的代码中不存在冗余,大大提高了代码的重用性;同时,也便于扩展,这样的过程在面向对象中即被称为继承。

2、定义:

生活中的继承定义:我们遗传了父母的DNA以及染色体。

面向对象中的继承定义:面向对象编程中提供的子类可以沿用父类某些行为和特征的一种方式。

3、解释:

当某类继承另一个类时,被继承的类称为父类或基类,该类被称为子类或派生类;子类自动拥有父类的某些字段、属性和方法等,子类不需要重新定义上述成员,而只需定义自己的特定新成员即可。这种做法既提高了代码的重用性、从而提高程序设计的效率,同时又为程序设计中的特殊功能提供了编写代码的自由空间,从而维护已有程序设计成果的可扩展性。

4、特点:

1)传递性:子类会继承父类的某些特征和行为,同样也会继承父类的父类的某些特征和行为。

2)相对性:继承是一种关系。在该关系中,存在有父类(基类)和子类(派生类)两种角色,这种关系是相对的。

3)单根性:C#中,类只能有一个父类

5、实现:

阅读课堂案例 

7、注意:

1所有的类都直接或间接继承于Object类(代码示例

2子类无法继承父类的构造方法,也无法拥有父类的私有成员(代码示例

3父类的引用可以指向子类的对象,但子类的引用无法指向父类的对象(代码示例

4创建子类对象时,先调用父类构造方法,再调用子类的构造方法(代码示例

5在继承中,父类存在无参构造方法时,子类无须显式调用父类构造方法;反之,即当父类中不存在无参构造方法时,子类必须通过base关键字显式调用父类构造方法(代码示例

8thisbase关键字

1this作用及用法:this代表本类对象,一般可用可不用

2base作用及用法:base代表父类对象,一般用于在子类中调用父类构造函数

注意:在静态方法中无法使用。

9protected关键字(主要说明在子类和其他类的区别)

二、多态

1、引入

上前面一节课我们一起看了继承的概念,继承是子类沿用父类某些行为和特征的一种方式。我们也对行者、使者、罗汉类建立了一个公共的父类,在这个父类中有一些它们共有的属性和方法,但是在实际应用中并不是这三个类对同一个方法都做相同的处理。比如行者、使者、罗汉三个人虽然都念经,但对于念经的做法就完全不一样。在程序中我们如何来处理这样的问题?这里呢我们就一起来学习下多态。

2、定义

字面意思:多种形态

面向对象中的定义:多个不同的子类对于父类的同一个方法的不同实现。

3、实现形式:

1)重写:关键字override 

使用步骤:

a) 将父类方法定义为虚方法,关键字:virtual

b) 在子类中如果对父类的该方法有不同实现,则重写父类的虚方法。关键字:override

注意:

a)重写方法与被重写方法访问修饰符、返回值类型、方法名称和参数必须一致。 

b)在调用方法时,调用哪个方法取决于使用的对象

代码示例:

a)重写父类的虚方法

a、代码示例

b)重写父类的重写方法

a、代码示例

(创建子类对象,创建父类引用子类对象分别举例说明)

自我思考并总结:重写与重载的区别?

2) 隐藏:关键字new

使用步骤:1、定义父类方法

  2、在子类中如果对父类的该方法有不同实现,则将父类的方法隐藏(覆盖)。关键字:new

代码示例

注意:

a)可以不使用new关键字,但是会有警告,不提倡这种写法。 

b)在调用方法时,调用哪个方法取决于对象的引用

附:密封Sealed(了解下特性即可)

1、作用:

主要是为了避免类被继承或者重写方法被重写。

2、代码示例:

3、特点:

1)类被密封后,不允许被继承。

2)重写方法被密封后,不允许被重写。

4、注意:

1)使用密封方法时,该方法必须为重写方法。

本章总结:

1、继承的特点以及注意事项

2、多态的两种实现形式以及特点

3、密封类的作用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值