继承和多态(上)

上传人:ji****72 文档编号:56775450 上传时间:2018-10-15 格式:PPT 页数:41 大小:542KB
返回 下载 相关 举报
继承和多态(上)_第1页
第1页 / 共41页
继承和多态(上)_第2页
第2页 / 共41页
继承和多态(上)_第3页
第3页 / 共41页
继承和多态(上)_第4页
第4页 / 共41页
继承和多态(上)_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《继承和多态(上)》由会员分享,可在线阅读,更多相关《继承和多态(上)(41页珍藏版)》请在金锄头文库上搜索。

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,飞机、汽车和轮船可归于交通工具类, 飞机/汽车/轮船可以继承交通工具类某些属性和操作,所以交通工具和飞行器/汽车/轮船之间是继承关系,例2

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

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

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

7、法,这个实际继承了覆盖了父类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 hireDay;/ 上述属性已经被继

9、承 /在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类中定义,它们也自动地从Employ

11、ee类中继承过来了。(注意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)子类可以添加字段,也可以添加方法或者覆盖父类中的方法。然而,继承不能去除父类中的任何字段和方法。,Jav

13、a语言概述,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是抽象修饰符,可以用来修饰类或方法。,1、抽象类(abstra

16、ct) 现实生活中,可以发现很多事物可以认为是同一种概念,而这个概念只是抽象的概念。例如:“交通工具”,“鸟”,“人”等等; 相对应有些事物是具体的:如“自行车”,“三轮车”,“卡车”;“麻雀”,“老鹰”;“学生”,“职工”等等;,实际的使用中动物是一个“抽象概念”,我们可以把刚才例子改一下,如何抽象?,Code: public class cat extends Animal . public class Bird extends Animal . ,RETURN,2、 抽象类(abstract) 抽象类是针对具体类(Concrete)来说的,抽象类和具体类是继承的关系(抽象继承)。 当一个类被声明为abstract时,这个类被称为是抽象类。所谓抽象类就是没有具体实例对象的类。 抽象类包含了一些概念基本的属性和抽象方法,具体类包含子类特殊的属性和方法。,

展开阅读全文
相关资源
相关搜索

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

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