欢迎来到天天文库
浏览记录
ID:38302040
大小:812.00 KB
页数:87页
时间:2019-06-08
《面向对象程序设计(高级篇)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章面向对象程序设计(高级篇)主讲人:应该重点掌握以下内容:继承和多态性的基本概念继承机制多态性与重载抽象类包与接口目录4.1继承和多态性的概念4.2继承机制4.3多态性4.4抽象类4.5包与接口4.6内部类4.7匿名类4.1继承和多态性的概念4.1.1继承的概述继承,就是新的类从已有类那里得到已有的特性。已有的类称为基类或父类,产生的新类称为派生类或子类。派生类同样也可以作为基类再派生新的类,这样就形成了类的层次结构。类间的继承关系是软件复用的一种形式。子类(派生类)可以沿用父类(基类)的某些特征,并根据自己的需要对性
2、能加以修改,添加新的属性和操作。由于巴士、卡车和出租车作为交通工具,特将它们的共同特性抽取出来,形成一个父类(也称超类),代表一般化属性,而巴士、卡车和出租车转化为子类,继承父类的一般特性包括父类的数据成员和行为如外观颜色和刹车等特性,有产生自己独特的属性和行为如巴士的最大载客数和报站,区别于父类的特性。继承的方式包括单一继承和多重继承。单一继承(singleinheritance)是最简单的方式:一个派生类只从一个基类派生。多重继承(multipleinheritance)是一个派生类有两个或多个基类。这两种继承方式如图
3、4.1所示。请注意图中箭头的方向,本书约定,箭头表示继承的方向,由子类指向父类。4.1.2多态性的概述多态性(Polymorphism)是面向对象程序设计的重要特性之一,它与封装性和继承性一起构成了面向对象程序设计的三大特性。多态性主要体现在:向不同的对象发送同一个消息,不同的对象在接收时会产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的消息。在Java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多态)和方法重写实现的动态多态性(也称动态联编)。(1)编译时多态在编译阶段,具体调
4、用哪个被重载的方法,编译器会根据参数的不同来静态确定调用相应的方法。(2)动态联编程序中凡是使用父类对象的地方,都可以用子类对象来代替。在程序运行期间可以通过引用子类的实例来调用子类的方法。4.2继承机制4.2.1继承的定义编程中遇到下面的情况:定义教师类。publicclassDotNetTeacher{//教师分为.Net教师privateStringname;//教师姓名privateStringschool;//所在学校publicDotNetTeacher(StringmyName,StringmySchool)
5、{name=myName;school=mySchool;}publicvoidgiveLession(){System.out.println("启动VS2010");System.out.println("知识点讲解");System.out.println("总结提问");}publicvoidintroduction(){System.out.println("大家好!我是"+school+"的"+name+".");}}定义教师类。publicclassJavaTeacher{//教师分为Java教师privat
6、eStringname;//教师姓名privateStringschool;//所在学校publicJavaTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLession(){//授课方法的具体实现System.out.println("启动MyEclipse");System.out.println("知识点讲解");System.out.println("总结提问");}publicvoidintroduct
7、ion(){//自我介绍方法的具体实现System.out.println("大家好!我是"+school+"的"+name+".");}}在程序处理中,发现两个类的定义非常相似,有很多相同点,如教师的属性姓名、所属部门类似,类的方法也基本相同。针对这种情况,将java教师类和.net教师类的共性抽取出来,形成父类Teacher类,使得.net教师和java教师成为Teacher类的子类,则子类继承父类的基本属性和方法,就简化了子类的定义。上述代码修改如下:父类Teacher:publicclassTeacher{priv
8、ateStringname;//教师姓名privateStringschool;//所在学校publicTeacher(StringmyName,StringmySchool){name=myName;school=mySchool;}publicvoidgiveLesson(){//授课方法的具体实现
此文档下载收益归作者所有