第6讲 继承和多态(上).ppt_第1页
第6讲 继承和多态(上).ppt_第2页
第6讲 继承和多态(上).ppt_第3页
第6讲 继承和多态(上).ppt_第4页
第6讲 继承和多态(上).ppt_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Java语言概述,1,第六讲 继承和多态(上),西亚斯学院计算机系 姜斌 2011年,Java语言概述,2,课堂内容,一、继承的概念 1、继承涵义 2、继承定义,父类和子类定义 3、继承例子 二、类库继承例子 1、Object类 2、例子 三、扩展类 1、继承关系的语法定义 2、属性继承和隐藏 3、方法继承, 覆盖和重载* 4、子类中构造函数的使用 四、Abstract继承,一、 继承涵义和定义,1、涵义,继承(Inheritance):三大特性之一 类之间的继承关系是现实世界中遗传关系的直接模拟, 一方面,它表示类之间的扩展性的联系以及对属性和操作的共享,即子类可以沿用父类(被继承类)的某些

2、特征。 另一方面,子类也可以具有自己独立的属性和操作,1、涵义,事物之间最基本联系: 1)“IS A”关系 继承是一个“IS A”关系 有时也称为“普通”和“特殊”的联系 新扩展出来的类是原有类的某一个特例,可有一个或多个子类或扩展类存在,继承关系,Java语言概述,6,组合关系,2)“HAS A”关系 一个事物所具有其他事物 其他事物是其组成部分,这种一般称为“组合”或“聚合”关系 (要和继承区别开),Java语言概述,7,2、继承定义,继承性是指一个新的类继承原有类的基本特性,并增加新的特性;原有类称为父类或基类,新的类称为子类或扩展类。 特征:软件复用的一种形式。新类由已存在的类生成,可

3、以不去从头去定义一个新类; 如果子类只从一个父类继承,则称为单继承;如果子类从一个以上父类继承,则称为多继承(在java中没有多继承,类似结构通过接口实现)。,继承关系是可以传递的,如左图, E继承C,而C继承A,因而E也继承了A,所以E也是A的子类,是间接子类,C是A的直接子类 Class C extends A Class F implements C, D ; Class E implements B, D(C,B,D为接口类),Java语言概述,9,3、 继承例子,例3,飞机、汽车和轮船可归于交通工具类, 飞机/汽车/轮船可以继承交通工具类某些属性和操作,所以交通工具和飞行器/汽车/轮

4、船之间是继承关系,例2,企业中员工可以有不同特殊员工,如经理是特殊的员工,所以,员工和经理类之间是继承关系,例1,动物有不同种类,例如:猫科类和鸟类,所以,动物和猫/鸟之间是继承关系,二、类库继承例子,Java语言概述,11,1. Object类类中的“黄帝”,是一个特殊的类,所有类(包括类库中的和用开发者创作的类都属于其子类,并继承其内容) Object类是所有类的根. 每个类都以它来作为超类, 所有的类, 包括 数组(arrays), 都可实现覆盖Object类中的方法. 每个类都隐藏地扩展了此类,即等同于在类地声明时加入,“extends Object”,Java语言概述,12,Obje

5、ct类的方法,常用的方法: String toString() 输出关于对象的描述信息,可以被覆盖 返回对象的字符串表示。Object 的方法返回一个字符串、包含该对象的类名、一个字符和实例散列码(哈希)的十六进制表示。,protected Object clone() 创建并返回此对象的一个副本。(在子类中不要依赖Object的这个方法。) boolean equals(Objectobj) 指示某个其他对象是否与此对象“相等”。(在子类中不要依赖Object的这个方法。) protected void finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用

6、此方法。 Class getClass() 返回一个对象的运行时类。 Int hashCode() 返回该对象的哈希码值。,2、类库类的继承特例,由于所有类都是由继承java.lang.Object而来,所以类库的类都是Object的类的直接或间接子类。 例如: java.lang.String直接继承Object javax.swing.JOptionPane间接继承Obejct 用户自定义类也直接或间接继承Object,3、定义思考,我们定义的飞机类Plane,其实隐含继承Object class Plane extends Object /系统在编译时自动执行 例如可以在Plane类中我

7、们定义有toString方法,这个实际继承了覆盖了父类Object同名方法; 方法为: public String toString() return (speed is:+ speed + nlook is:+look); 思考:如果我们不定义这个方法会怎么样,三、 继承的实现 定义扩展类,Java语言概述,17,父类名跟在extends 关键字后面,用来说明当前类是哪个已经存在类的子类,存在继承关系。,定义顺序: 1)定义父类“动物类” Animal; 2)然后定义子类“猫类” Cat; Class Cat extends Animal,子类从父类继承有两个主要的方面: (1)属性的继承。

8、例如,员工是一个父类,有名字、薪水和聘用日期属性。子类继承所有属性 (2)方法的继承。一个父类定义了若干操作,如属性获取的三个get方法,加薪方法,它们要被继承。,1、 继承关系定义,声明类头-父类名,Java语言概述,18,1) 在动物类中包含基本属性,在Cat中包括特有属性“爪子数”,在Bird类中有“翅膀数”属性; 2)(见Employee类的代码)Employee类是一个父类。因为子类是父类的扩展,增加了父类没有的属性和方法 protected String name; /在Employee类中 protected double salary; protected Date hireD

9、ay;/ 上述属性已经被继承 /在Manager类中 private double bonus; /经理才有业绩金 ,我是扩展类!,2 属性继承与隐藏,子类继承了父类成员属性和方法,同时提供更多特有属性和方法,比它们的父类具有更多的功能,,Java语言概述,19,2 属性继承与隐藏,对于父类来说,属性的作用域范围和属性设置是有要求的,要求如下: 父类代码中定义的private属性是访问范围在子类无法访问到。,(1)子类可以访问其父类的protected或 public(不推荐)成员;推荐设成protected (2)protected访问是为了体现继承关系来专门提供的访问范围。 (3)由于被继

10、承的父类成员没有在子类声明中列出,但是这些成员确实存在于子类中。,Java语言概述,20,2 属性继承与隐藏,Manger类增添了一个新的字段用于存储奖金,并且增添了一个新方法用于设置它的值:(它继承了Employee中的所有属性和方法) class Manager extends Employee public void setBonus(double b) bonus=b; private double bonus; ,Java语言概述,21,3 方法继承、覆盖与重载,对于Manager对象,可以使用getName和getHireDay等方法。即使这些方法没有明显地在Manager类中定义

11、,它们也自动地从Employee类中继承过来了。(注意Object是所以类的超类,见附录) 2)方法覆盖(Methods Overriding) 方法的覆盖是指:子类定义同名方法来覆盖父类的方法,是多态技术的一个实现。当父类方法在子类中被覆盖时,通常是子类版本在方法被子类对象调用时动态使用,并做一些附加的工作。,1)方法继承(Methods Inheriting),Java语言概述,22,方法覆盖实现如下:Override,如果Employee中定义了getSalary()方法,Manager类中也要定义getSalary()方法,那么有两种情况, a, 一种是方法体完全重写; b, 一种是调

12、用父类中的该方法,再加一些语句。 Public double getSalary() double baseSalary=super.getSalary(); return baseSalary+bonus; Super使编译器调用父类方法的一种手段。,Java语言概述,23,关于覆盖应注意的事项:,(1)不使用super而希望引用父类方法会导致无限的递归,因为子类方法实际上是在调用它自己。 (2)方法覆盖中,子类在重新定义父类已有的方法时,应保持与父类完全相同的方法头声明,即与父类完全相同的方法名、返回值和参数列表。 (3)子类可以添加字段,也可以添加方法或者覆盖父类中的方法。然而,继承不能

13、去除父类中的任何字段和方法。,Java语言概述,24,3)方法重载(Methods Overloading),重载的定义:可以用相同的方法名但不同的参数表来定义方法(参数表中参数的数量、类型或次序有差异),注意方法的限定符相同,返回值类型相同,这称为方法重载。,重载(overloading):当多个方法具有相同的名字而含有不同的参数时,便发生重载。编译器必须挑选出调用哪个方法。它通过将在不同方法头部中的参数类型和在特定的方法调用中使用值的类型进行比较,从而挑选出正确的方法。,Java语言概述,25,注意重载不是子类对父类同名方法的重新定义,而是类对自身已有同名方法的重新定义: A)java中允

14、许对任何方法重载。所有,要描述一个方法,需要指定方法的名字以及它的参数类型。此表达式被称为方法的型构(Signiture) 例如: String 类有四个叫做indexOf的方法,它们的型构不同: indexOf(int); indexOf(String) indexOf(int,int); indexOf(String, int) B)注意:返回值类型不是方法特征中的一部分。即不能有这样的两个方法:它们具有相同的名字和参数类型,但只是具有不同的返回值类型。,Java语言概述,26,4 在子类中使用构造函数,子类构造函数也不能直接访问父类中的私有字段 (1)子类构造函数总是先调用(显式的或隐式

15、地)其父类的构造函数,以创建和初始化子类的父类成员。 (2)构造函数不能继承,它们只属于定义它们的类。 (3)当创建一个子类对象时,子类构造函数首先调用父类的构造函数并执行,接着才执行子类构造函数。 见书上构造器规则(P74, 段1),Java语言概述,27,如果构造函数有参数时,子类构造函数在使用时可先执行父类带有参数的构造函数。 Person(String n,int i) name=n; age=i; Student(String n,int i,String j) super(n,i); Sno=j; ,/要放在子类构造器第一行,四、抽象类与抽象方法,abstract是抽象修饰符,可以

16、用来修饰类或方法。,1、抽象类(abstract) 现实生活中,可以发现很多事物可以认为是同一种概念,而这个概念只是抽象的概念。例如:“交通工具”,“鸟”,“人”等等; 相对应有些事物是具体的:如“自行车”,“三轮车”,“卡车”;“麻雀”,“老鹰”;“学生”,“职工”等等;,实际的使用中动物是一个“抽象概念”,我们可以把刚才例子改一下,如何抽象?,Code: public class cat extends Animal . public class Bird extends Animal . ,RETURN,2、 抽象类(abstract) 抽象类是针对具体类(Concrete)来说的,抽象

17、类和具体类是继承的关系(抽象继承)。 当一个类被声明为abstract时,这个类被称为是抽象类。所谓抽象类就是没有具体实例对象的类。 抽象类包含了一些概念基本的属性和抽象方法,具体类包含子类特殊的属性和方法。,详细,new,Animal cat1 = new Cat(); /向上转型 Animal cat2 = new Cat(); Animal bird1 = new Bird();,见例子TestExtends2,注意: 抽象类不能实例化,3、 抽象方法 作为类方法修饰符,abstract则声明了一种仅有方法头,而没有具体的方法体和操作实现的抽象方法。只含有一个声明,没有方法主体。下面是抽

18、象方法声明时采用的语法: abstract void methodName(); 抽象类中:abstract方法只有方法头的声明,而用一个分号来代替方法体的定义: 子类:在继承的子类中,对于抽象方法要求实现,方法头和抽象方法一样。(如果还有子类,这个类还可定义为抽象类),抽象方法很重要,在Java编程语言中抽象方法是非常重要的概念。不仅抽象类,在接口里你会大量的用到它。,Java语言概述,34,小结,继承的涵义和概念,是现实什么关系体现? 父类和子类的概念,又叫做什么? 如何定义Java继承关系,关键词是? 继承中属性和方法的特点,this和super关键词的用法 什么是抽象类,,Java语言

19、概述,35,作业,做书上课后题1,2 理解Manager继承Employee的例子(代码见我的课后任务包(实验时ftp上下载 ,包括Employee,Manager,InheritanceTest.java)。 通过Manager例子的理解,自己思考工资系统的UML图设计,实现工资系统的例子;,附录,UML说明和,Java语言概述,37,特别例子:继承的应用示范(点,圆的抽象),+setPoint(),+toString(),-X: int,-Y: intr,Point,+setRadius(),+getRadius(),-,Circle,+getX(),+getY(),-radius,+toString(),+area(),点和圆的关系是一种继承关系,圆可以理解成具有半径的点。,Java语言概述,38,6 扩展类继承的应用示范,(见例子5-2) 现在讨论一个继承性的具体例子5-2,点、圆的层次结构。首先建立并使用Point类,然后从point类继承产生Circle类。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论