《(本科)第6章 类的继承与多态性ppt课件.ppt》由会员分享,可在线阅读,更多相关《(本科)第6章 类的继承与多态性ppt课件.ppt(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、课程主讲人:第6章 类的继承与多态性2Java编程基础及应用第6章 类的继承与多态性36.1 继承6.2 多态6.3 本章小结第6章 类的继承与多态性46.1 继承6.2 多态6.3 本章小结第6章 类的继承与多态性6.1.1 引言6.1.2 继承的概念6.1.3 继承的实现6.1.4 类方法和实例方法在继承过程中的常见问题6.1.5 继承的特点与优点6.1 继承当有一天你要开发个播放器软件,有多种编程语 言可供选择。一种是面向过程的典型语言C语言,实 现播放器的功能需要1700多行代码;另一种是面向对象 的典型语言Java语言,实现同样的功能只需要80多行代码。很明显,用Java语言编程的工
2、作量较小。为什么用 Java语言编程的工作量会比较小呢?因为它采取了继承机 制。继承这种技术可以复用以前的代码,能够大大缩短 开发周期,降低开发费用。6.1.1 引言下图为一个继承的实例:6.1.1 引言继承是从巳有的类中派生出新的类,新的类拥有已有 类的数据属性和行为,并能扩展新的数据属性和行为。换句话说,继承就是在已经存在的类的基础上再扩展新的类。已经存在的类称为父类、超类或者基类。新产生的类称为子类或派生类。子类拥有父类的所有特性。当然,也可以在子类中添加新的方法和成员变量,这些新添加 的方法和成员支量仅仅属于子类。继承分为单继承和多继承。单继承是指一个子类最多只能有一个父类。多继承是指
3、一个子类可以有两人以上的父类。由于多继承会带来二义性,在实际应用中应尽 量使用单继承。6.1.2 继承的概念关键字(extends) 继承通过关键字extends实现。如果使用默认的extends子句,则该类为的子类。子类可以继承父类中访问权限为public、 protected等的成员变量和方法,而不能继承访问权限为private的成员 变量和方法。例6.1继承实例:货车继承汽车类,所以拥有了汽车类的相应属性。6.1.3 继承的实现/ExtendsTest.Javapublic class ExtendsDemo public static void main(String args) Tr
4、uck t = new Truck (); t. size = 100; 货车类的一个实例t从汽车类继承了size, color属性 System.out.println(t. size);关键字(extends) Java提供了关键字super来实现对父类中被屏蔽的方法或成员变量的 访问。super关键字可以在以下三种情况中使用:6.1.3 继承的实现(1)用来访问父类中被覆盖的方法;(2)用来调用父类中的构造方法;(3)用来访问父类屮被隐藏的成员变量。例:子类Student继承父类SuperTest,当子类与父类有同名属性时, 调用父类属性可以通过关键字super或创建子类对象两种方法。6
5、.1.4 类方法在继承过程中的常见问题子类方法不能缩小父类方法的访问权限。例如,在以下代码中,子类的method()方法是私有的,父类的method()方法是公共的,子类缩小了父类方法的防问权限,这是无效的方法覆盖,将导致编译错误。但子类可以放大父类方法的访问权限。子类方法不能抛出比父类方法更多的异常(异常将在 后面的章节中介绍)。子类方法抛出的异常必须和父 类方法抛出的异常相同或者子类方法抛出的异常是父 类方法抛出的异常类的子类。父类的静态方法不能被子类覆盖为非静态方法。6.1.4 类方法在继承过程中的常见问题子类可以定义与父类的静态方法同名的静态方法,以 便在子类中隐藏父类的静态方法。编译
6、时,子类定义 的静态方法也必须满足与方法覆盖类似的约朿,方法 应参数名一致,返回类型一致,不能缩小父类方法的 访问权限,不能抛出更多的异常。父类的非静态方法不能被子类覆盖为静态方法。父类的私有方法不能被子类覆盖。6.1.5 继承的特点与优点继承的基本原则:子类继承父类的所有成员变量(括静态成员);子类继承除父类构造方法外的所有成员方法(包括静态方法);子类不能继承父类的构造方法,但在其构造方法中会隐含调用父类的默认构造方法。继承的特点:(1) 提供多继承机制。从理论上说,一个类可以是多个一般类的子类,它可以从密个一般类中继承属性与方法,这便是多继承。Java出于安全性和可靠性的考虑,仅支持单继
7、承,而使用接口机制来实现多继承。(2) 继承通过增强一致性来减少模块间的接口和界面, 大大增加了程序的易维护性。6.1.5 继承的特点与优点(3)继承提供了软件复用功能。若类B继承类A,那么建立类B时,只需要描述与类A(基类)不同的少量特征(数据 成员和成员方法)即可。这种做法能降低代码和数据的冗 余度,大大增加程序的可重用性。(4) 继承简化了人们对事物的认识和描述,能清晰体现 相关类间的层次结构关系。(5) 继承关系是传递的。若类C继承类B,类B继承类A, 则类C既有从类B那里继承下来的属性与方法,也有从类 A那里继承下来的属性与方法,还可以有自己新定义的属 性和方法。6.1.5 继承的特
8、点与优点继承是提高代码的复用性,以及提高系统扩展性的一 种有效手段。继承关系有一定的适用条件,在书写代 码时不能随便建立继承关系,而应该根据本章所学知 识,呑理地选用继承。继承的优点:(1) 父类的属性和方法可用于子类;(2) 可以轻松地自定义子类;(3) 保证代码的可重用性;(4) 设计应用程序变得更加简单。166.1 继承6.2 多态6.3 本章小结第6章 类的继承与多态性176.2 多态 方法的重写、重载与动态连接构成了多态性。Java之所以引入多态的概念,是因为它在类的继承问题上和C+不同,后者允许多继承,这确实给其带来了非常强大的 功能,但是复杂的继承关系也给C+开发者带来了更大的
9、麻烦。为了规避风险,Java只允许单继承,派生类与基类 间有1S-A的关系。这样做虽然保证了继承关系的简单明了,但是势必在功能上有很大的限制,所以,Java引入了多态性的概念以弥补这点的不足。此外,抽象类和接口也是解决单继承规定限制的重要手段。同时,多态也是面向对象编程的精髓所在。186.2.1 多态的概念多态是指同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。多态指同一个实体同时具有多种形式。它是面向对象程序设计的一个重要特征。如果一个语言只支持类而不支持多态,只能说明它是基于对象的,而不是面向对象的。多态的实现步骤:(1) 子类重写父类的方法;(2) 把父类类型作为参数类型
10、,该父类及其子类对象作 为参数传入;(3)运行时,根据实际创建的对象类型动态决定使用哪 个方法。例:定义Football、Basketball、Popolong三个类分别继承Game类,当play方法分别作用于这三个类所创建的对象时产生不同的执行结果。6.2.1 多态的概念/Test.Javapublic class Test extends SuperTest public static void main(String args)Game games = new Game10; games0 = new Basketball0):W games 17 games2= new Popolon
11、g(): if(gamesi != null) new Footbal10: for (int i-0:i :gages.length, inom gamesi.play():方法覆盖:是指在子类中,定义名称、参数个数与类型均与父类 相同的方法,用以重写父类中的方法的功能。例:子类Child继承父类Father,在于类Child中定义与父类名称、参数个数与类型均相同的方法,实现对父类方法的覆盖。6.2.2 方法覆盖和重载/Child.Javapublic class Child extends SuperTestint add(int d,String c) ( / 子类Child的add方法
12、重载了父类的同名方法 d+; Sxsto.println(“子类中的方法:”);return d;public void set () System.out.println(2222);public static void main(String args) Child c = new Child(); System.out.println(c.add(4,3);方法重载:是指在同一个类中,定义多个名称相同,但参数个数或类型不同的方法,程序中的对象根据参数的个数或者类型,调 用相对应的方法。例:StudentOverload类定义构造函数和get()方法,并重载了这两个方法,sol、so2对象
13、根据这两个方法的参数个数或类型调用相应的方法。6.2.2 方法覆盖和重载/StudentOverload.Javapublic class StudentOverloadint age:String name;public StudentOverload()0public StudentOverload(int age,String name) /构造函数的重载this.age = age; this.name = name;方法覆盖与重载均是Java多态的技巧,但两者存在一定的区别:(1)方法覆盖要求参数(参数的个数与类型)必须一致,相反方法重载要求参数不一致;(2)方法覆盖要求返回值类型必须一致,而方法重载对此不做要求;(3)方法覆盖只能用于子类覆盖父类的方法,方法重载针对同一个类的所有方法(包括从父类中继承而来的方法)6.2.2 方法覆盖和重载236.1 继承6.2 多态6.3 本章小结第6章 类的继承与多态性 本章首先引出继承在现实生活中的实例;详细介绍了继承的相关知识,包括继承的概念、实现、常见问题及继承的特点与优点。其次,介绍了多态的概念及方法 覆盖与重载。继承与多态是面向对象程序设计与面向过程程序设计方法中最大的区别之处,使用继承可以提高代码的复用性,使用多态可以提高代码的可扩展性及可维护性。6.3 本章小结
限制150内