单元2面向对象程序设计(下).ppt

上传人:王** 文档编号:178217 上传时间:2023-03-21 格式:PPT 页数:33 大小:498.50KB
下载 相关 举报
单元2面向对象程序设计(下).ppt_第1页
第1页 / 共33页
单元2面向对象程序设计(下).ppt_第2页
第2页 / 共33页
单元2面向对象程序设计(下).ppt_第3页
第3页 / 共33页
单元2面向对象程序设计(下).ppt_第4页
第4页 / 共33页
单元2面向对象程序设计(下).ppt_第5页
第5页 / 共33页
单元2面向对象程序设计(下).ppt_第6页
第6页 / 共33页
单元2面向对象程序设计(下).ppt_第7页
第7页 / 共33页
单元2面向对象程序设计(下).ppt_第8页
第8页 / 共33页
单元2面向对象程序设计(下).ppt_第9页
第9页 / 共33页
单元2面向对象程序设计(下).ppt_第10页
第10页 / 共33页
亲,该文档总共33页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《单元2面向对象程序设计(下).ppt》由会员分享,可在线阅读,更多相关《单元2面向对象程序设计(下).ppt(33页珍藏版)》请在优知文库上搜索。

1、第二章第二章面向对象程序设计本章内容l2.1类与对象l2.2构造方法l2.3类的继承l2.4抽象类、接口、枚举类型l2.5多态2.3类的继承l继承概述多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那个类即可。通过extends关键字可以实现类与类的继承class 子类名 extends 父类名 单独的这个类称为父类,基类或者超类;这多个类可以称为子类或者派生类。有了继承以后,我们定义一个类的时候,可以在一个已经存在的类的基础上,还可以定义自己的新成员。2.3类的继承l通过一个具体案例来演示代码案例1:学生类和老师。定义两个功能(吃饭,睡

2、觉)案例2:加入人类后改进。l继承的好处提高了代码的复用性多个类相同的成员可以放到同一个类中提高了代码的维护性如果功能的代码需要修改,修改一处即可让类与类之间产生了关系,是多态的前提其实这也是继承的一个弊端:类的耦合性很强Java中继承的注意事项l子类只能继承父类所有非私有的成员(成员方法和成员变量)其实这也体现了继承的另一个弊端:打破了封装性l子类不能继承父类的构造方法,但是可以通过super(后面讲)关键字去访问父类构造方法。l不要为了部分功能而去继承父类与子类l案例演示子父类中同名和不同名的成员变量l结论:在子类方法中访问一个变量首先在子类局部范围找然后在子类成员范围找最后在父类成员范围

3、找(肯定不能访问到父类局部范围)如果还是没有就报错。(不考虑父亲的父亲)父类与子类lsuper的用法和this很像this代表本类对应的引用。super代表父类存储空间的标识(可以理解为父类引用)l用法(this和super均可如下使用)l访问成员变量lthis.成员变量super.成员变量l访问构造方法(子父类的构造方法问题讲)lthis()super()l访问成员方法(子父类的成员方法问题讲)lthis.成员方法()super.成员方法()父类与子类l子类中所有的构造方法默认都会访问父类中空参数的构造方法l为什么呢?因为子类会继承父类中的数据,可能还会使用父类的数据。所以,子类初始化之前,

4、一定要先完成父类数据的初始化。每一个构造方法的第一条语句默认都是:super()父类与子类l如何父类中没有无参构造方法,该怎么办呢?子类通过super去显示调用父类其他的带参的构造方法子类通过this去调用本类的其他构造方法本类其他构造也必须首先访问了父类构造一定要注意:super()或者this(.)必须出现在第一条语句山否则,就会有父类数据的多次初始化l看程序写结果面试题lthis关键字和super关键字分别代表什么?以及他们各自的使用场景和作用。父类与子类l案例演示子父类中同名和不同名的成员方法l结论:通过子类对象去访问一个方法首先在子类中找然后在父类中找如果还是没有就报错。(不考虑父亲

5、的父亲)2.3类的继承l方法重写概述子类中出现了和父类中一模一样的方法声明,也被称为方法覆盖,方法复写。使用特点:如果方法名相同,最终使用的是子类自己的。l方法重写的应用:当子类需要父类的功能,而功能主体子类有自己特有内容时,可以重写父类中的方法,这样,即沿袭了父类的功能,又定义了子类特有的内容。2.3类的继承l方法重写的注意事项父类中私有方法不能被重写子类重写父类方法时,访问权限不能更低父类静态方法,子类也必须通过静态方法进行重写。(其实这个算不上方法重写,但是现象确实如此,至于为什么算不上方法重写,多态中我会讲解)面试题l方法重写和方法重载的区别?方法重载能改变返回值类型吗?Overloa

6、dOverride2.3类的继承lJava只支持单继承,不支持多继承。一个类只能有一个父类,不可以有多个父类。class SubDemo extends Demo /okclass SubDemo extends Demo1,Demo2./errorlJava支持的继承体系class Aclass B extends Aclass C extends B继承练习l学生案例和老师案例讲解使用继承前使用继承后父类中成员private修饰,子类如何访问呢? 可以通过可以通过super关键字访问父类的带参构造方法。关键字访问父类的带参构造方法。final关键字lfinal关键字是最终的意思,可以修饰类

7、,成员变量,成员方法。修饰类,类不能被继承修饰变量,变量就变成了常量,只能被赋值一次修饰方法,方法不能被重写2.4抽象类、接口、枚举类型l抽象类概述回想前面我们的猫狗案例,提取出了一个动物类。并且我们在前面也创建过了动物对象,其实这是不对的。 为什么呢?因为,我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道,这是什么动物。 所以说,动物本身并不是一个具体的事物,而是一个抽象的事物。只有真正的猫,狗才是具体的动物。同理,我们也可以推想,不同的动物吃的东西应该是不一样的,所以,我们不应该在动物类中给出具体体现,而是应该给出一个声明即可。在Java中,一个没有方法体的方法应该定义为

8、抽象方法,而类中如果有抽象方法,该类必须定义为抽象类。1、抽象类l抽象类特点抽象类和抽象方法必须用abstract关键字修饰格式abstract class 类名 public abstract void eat();抽象类不一定有抽象方法,有抽象方法的类一定是抽象类抽象类不能实例化那么,抽象类如何实例化呢?按照多态的方式,由具体的子类实例化。其实这也是多态的一种,抽象类多态。抽象类的子类要么是抽象类要么重写抽象类中的所有抽象方法1、抽象类l成员变量可以是变量也可以是常量l构造方法有构造方法,但是不能实例化那么,构造方法的作用是什么呢?用于子类访问父类数据的初始化l成员方法可以有抽象方法 限定

9、子类必须完成某些动作也可以有非抽象方法 提高代码服用性1、抽象类l猫狗案例具体事物:猫,狗共性:姓名,年龄,吃饭l老师案例具体事物:基础班老师,就业班老师共性:姓名,年龄,讲课。l学生案例具体事务:基础班学员,就业班学员共性:姓名,年龄,班级,学习,吃饭l员工案例(备注部分)1、抽象类l一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?labstract不能和哪些关键字共存private冲突final冲突static 无意义2、接口l接口概述继续回到我们的猫狗案例,我们想想狗一般就是看门,猫一般就是作为宠物了,对不。但是,现在有很多的驯养员或者是驯兽师,可以训练出:猫钻火圈,

10、狗跳高,狗做计算等。而这些额外的动作,并不是所有猫或者狗一开始就具备的,这应该属于经过特殊的培训训练出来的,对不。所以,这些额外的动作定义到动物类中就不合适,也不适合直接定义到猫或者狗中,因为只有部分猫狗具备这些功能。所以,为了体现事物功能的扩展性,Java中就提供了接口来定义这些额外功能,并不给出具体实现,将来哪些猫狗需要被培训,只需要这部分猫狗把这些额外功能实现即可。2、接口l接口特点接口用关键字interface表示格式:interface 接口名 类实现接口用implements表示格式:class 类名 implements 接口名 接口不能实例化那么,接口如何实例化呢?按照多态的方

11、式,由具体的子类实例化。其实这也是多态的一种,接口多态。接口的子类要么是抽象类要么重写接口中的所有抽象方法2、接口l成员变量只能是常量默认修饰符 public static finall构造方法没有,因为接口主要是扩展功能的,而没有具体存在l成员方法只能是抽象方法默认修饰符 public abstract类与类,类与接口以及接口与接口的关系l类与类继承关系,只能单继承l类与接口实现关系,可以单实现,也可以多实现。还可以在继承一个类的同时实现多个接口l接口与接口继承关系,可以单继承,也可以多继承接口练习l猫狗案例,加入跳高的额外功能。l定义一个名称为MyInterface的接口,接口中声明用于求

12、两个整数之和的add()方法和用于求3个整数之积的volume()方法。定义一个InterfaceDemo类来实现接口。3、枚举l枚举类型的概念一种引用类型用于表示若干个常量组成的数据集合。枚举类型主要应用于表示数量较少的常量组成的集合。l枚举类型定义的基本格式访问控制修饰符 enum /枚举类型元素l枚举类型元素的调用枚举类型名.元素名2.5多态l多态概述某一个事物,在不同时刻表现出来的不同状态。举例:猫可以是猫的类型。猫 m = new 猫();同时猫也是动物的一种,也可以把猫称为动物。动物 d = new 猫();在举一个例子:水在不同时刻的状态l多态前提和体现有继承关系有方法重写有父类

13、引用指向子类对象多态案例及成员访问特点l多态案例按照前提写一个多态的案例l成员访问特点l成员变量l编译看左边,运行看左边l成员方法l编译看左边,运行看右边l静态方法l编译看左边,运行看左边l所以前面我说静态方法不能算方法的重写多态的好处和弊端l多态的好处提高了程序的维护性(由继承保证)提高了程序的扩展性(由多态保证)l多态的弊端不能访问子类特有功能那么我们如何才能访问子类的特有功能呢?多态中的转型多态中的转型问题l向上转型从子到父父类引用指向子类对象l向下转型从父到子父类引用转为子类对象l多态成员访问及转型的理解孔子装爹案例多态练习l猫狗案例练习多态版l不同地方饮食文化不同的案例Personeat()SouthPersoneat()NorthPersoneat()

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > C/C++资料

copyright@ 2008-2023 yzwku网站版权所有

经营许可证编号:宁ICP备2022001189号-2

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!