第4章--面向对象程序设计(高级篇)

上传人:ji****72 文档编号:48662402 上传时间:2018-07-19 格式:PPT 页数:87 大小:812KB
返回 下载 相关 举报
第4章--面向对象程序设计(高级篇)_第1页
第1页 / 共87页
第4章--面向对象程序设计(高级篇)_第2页
第2页 / 共87页
第4章--面向对象程序设计(高级篇)_第3页
第3页 / 共87页
第4章--面向对象程序设计(高级篇)_第4页
第4页 / 共87页
第4章--面向对象程序设计(高级篇)_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《第4章--面向对象程序设计(高级篇)》由会员分享,可在线阅读,更多相关《第4章--面向对象程序设计(高级篇)(87页珍藏版)》请在金锄头文库上搜索。

1、第4章 面向对象程序设计 (高级篇 )主讲人:应该重点掌握以下内容: 继承和多态性的基本概念 继承机制 多态性与重载 抽象类 包与接口目目 录录4.1 继承和多态性的概念4.2 继承机制4.3 多态性4.4 抽象类4.5 包与接口4.6 内部类4.7 匿名类4.1继承和多态性的概念4.1.1 继承的概述继承,就是新的类从已有类那里得到已有的特性。已有的类称为基类 或父类,产生的新类称为派生类或子类。派生类同样也可以作为基类再派 生新的类,这样就形成了类的层次结构。 类间的继承关系是软件复用的一种形式。子类(派生类)可以沿用父类(基类)的某些特征,并根据自己的需要对性能加以修改,添加新的属性 和

2、操作。由于巴士、卡车和出租车作为交通工具,特将它们的共同特性抽取出来,形成一个父 类(也称超类),代表一般化属性,而巴士、卡车和出租车转化为子类,继承父类的一般特 性包括父类的数据成员和行为如外观颜色和刹车等特性,有产生自己独特的属性和行为如巴 士的最大载客数和报站,区别于父类的特性。继承的方式包括单一继承和多重继承。单一继承(single inheritance)是最简单的方式:一个派生类只从一个基类派生 。多重继承(multiple inheritance)是一个派生类有两个或多 个基类。这两种继承方式如图4.1所示。请注意图中箭头的方向,本书约定,箭头表示继承的方向,由子类指向父类。4.

3、1.2 多态性的概述 多态性(Polymorphism)是面向对象程序设计的重要特性之一,它与封 装性和继承性一起构成了面向对象程序设计的三大特性。 多态性主要体现在:向不同的对象发送同一个消息,不同的对象在接收时会 产生不同的行为(即方法)。也就是说,每个对象可以用自己的方式去响应共同的 消息。 在Java语言中,多态性体现在两个方面:由方法重载实现的静态多态性(编译时多 态)和方法重写实现的动态多态性(也称动态联编)。 (1)编译时多态在编译阶段,具体调用哪个被重载的方法,编译器会根据参数的不同来静态 确定调用相应的方法。 (2)动态联编程序中凡是使用父类对象的地方,都可以用子类对象来代替

4、。在程序运行期 间可以通过引用子类的实例来调用子类的方法。 4.2 继承机制4.2.1继承的定义编程中遇到下面的情况:定义教师类。public class DotNetTeacher /教师分为.Net教师private String name; / 教师姓名private String school; / 所在学校public DotNetTeacher(String myName, String mySchool) name = myName; school = mySchool;public void giveLession()System.out.println(“启动VS2010“)

5、;System.out.println(“知识点讲解“);System.out.println(“总结提问“);public void introduction() System.out.println(“大家好!我是“ + school + “的“ +name + “.“);定义教师类。public class JavaTeacher /教师分为Java教师private String name; / 教师姓名private String school; / 所在学校public JavaTeacher(String myName, String mySchool) name = myNam

6、e; school = mySchool;public void giveLession()/授课方法的具体实现System.out.println(“启动 MyEclipse“);System.out.println(“知识点讲解“);System.out.println(“总结提问“);public void introduction() /自我介绍方法的具体实现System.out.println(“大家好!我是“ + school + “的“ + name + “.“);在程序处理中,发现两个类的定义非常相似,有很多相同点,如教师的属性姓名、所属部门 类似,类的方法也基本相同。 针对这

7、种情况,将java教师类和.net教师类的共性抽取出来,形成父类Teacher类,使得 .net教师和java教师成为Teacher类的子类,则子类继承父类的基本属性和方法,就简化了子类的定义。上述代码修改如下:父类Teacher: public class Teacher private String name; / 教师姓名private String school; / 所在学校public Teacher(String myName, String mySchool) name = myName;school = mySchool;public void giveLesson() /授

8、课方法的具体实现System.out.println(“知识点讲解“);System.out.println(“总结提问“);public void introduction() /自我介绍方法的具体实现System.out.println(“大家好!我是“ + school + “的“ + name + “。“); 子类JavaTeacher: public class JavaTeacher extends Teacher public JavaTeacher(String myName, String mySchool) super(myName, mySchool);public vo

9、id giveLesson()System.out.println(“启动 MyEclipse“);super.giveLesson(); 子类NetTeacher: public class DotNetTeacher extends Teacher public DotNetTeacher(String myName, String mySchool) super(myName, mySchool);public void giveLesson()System.out.println(“启动 VS2010“);super.giveLesson(); 子类自动继承父类的属性和方法,子类中不再

10、存在重复代码,从而实现 代码的重用。完整的代码如下: 【例4-1】 自定义父类Teacher,创建其两个子类JavaTeacher和 DotNetTeacher。/*本程序的功能是定义一个教师类Teacher,并声明该类的两个子类, 并进行调试。*/文件名: test_teacher.java4.2.2继承的传递性类的继承是可以传递的。类b继承了类A,类c有继承了类b,这是c包涵a和b的所 有成员,以及c自身的成员,这称为类继承的传递性。类的传递性对java语言有重要的意义。下面的代码体现这一点。 public class Vehiclevoid vehicleRun() System.out

11、.println(“汽车在行驶!“); public class Truck extends Vehicle /直接父类为Vehiclevoid truckRun() System.out.println(“卡车在行驶!“); public class SmallTruck extends Truck/直接父类为Truckprotected void smallTruckRun() Console.WriteLine(“微型卡车在行驶!“);pbulic static void main(String args) SmallTruck smalltruck = new SmallTruck()

12、;smalltruck.vehicleRun(); /祖父类的方法调用smalltruck.truckRun(); /直接父类的方法调用smalltruck.smallTruckRun(); /子类自身的方法调用 4.2.3 类中属性的继承与隐藏1. 属性的继承子类可以继承父类的所有非私有属性。见下面代码: public class Personpublic String name;public int age;public void showInfo() System.out.println( “尊敬的”+name+”,您的年龄为:”+age); public class Student e

13、xtends Personpublic string school;public int engScore;public int javaScore;public void setInfo() name=“陈冠一”; /基类的数据成员age=20; /基类的数据成员school=“郑州轻工业学院”; 2. 属性的隐藏子类也可以隐藏继承的成员变量,对于子类可以从父类继承的成员变量,只要子类中定义的成员变量和父类中的成员变量同名时,子类就隐藏了继承的成员变 量 。当子类执行它自己定义的方法时,所操作的就是它自己定义的数据成员,从而覆盖父类继承来的数据成员。子类通过成员变量的隐藏可以把父类的状态变为

14、自 身的状态。4.2.4 类中方法的继承、覆盖与重载 1. 方法的继承父类中非私有方法都可以被子类所继承。 下面的程序实现这点,详见程序中的注释。 class Person/基类private String name;private int age;public void initInfo(String n,int a)name =n;age =a;public void showInfo() System.out.println( “尊敬的 “+ name + “ ,您的年龄为:“+age); public class SubStudent extends Person/子类private

15、String school;private int engScore;private int javaScore;public void setScores(String s,int e,int j)school=s;engScore =e;javaScore =j;public static void main(String args)SubStudent objStudent = new SubStudent();objStudent.initInfo(“王烁“,22); /来自父类继承的方法objStudent.showInfo(); /来自父类继承的方法objStudent.setSc

16、ores(“情话大学“,79,92); 1.在子类继承父类的成员方法时,应注意: 子类不能访问父类的private(私有)成员方法,但子类可以访问父类的public(公有)、protected(保护)成员方法。 protected访问时,子类和同一包内的方法都能访问父类的protected成员方法,但其他方法不能访问。 2. 方法的覆盖子类通过方法的覆盖可以隐藏继承的方法 ,方法覆盖是指:子类中定义一个方法,并且这个方法的名字、返回类型、参数列表与从父类继承的方法完全相同。【例4-2】自定义父类Person,创建其子类SubStudent。 /*本程序的功能是定义一个Person类和它的子类SubStud

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号