项目3 面向对象核心技术_第1页
项目3 面向对象核心技术_第2页
项目3 面向对象核心技术_第3页
项目3 面向对象核心技术_第4页
项目3 面向对象核心技术_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

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

文档简介

面向对象核心技术项目三高等院校公共课系列精品教材Java开发综合实战主动拓宽视野,把握事物的共性,着眼于事物之间的关系继承优秀传统文化并创新,多形态呈现正能量人文精神思政目标能够使用继承类和重写方法实现对象多样化能够使用方法重载和类转型实现多态能够使用抽象类、接口和内部类实现多重继承技能目标面向对象编程有三大基本特性:封装、继承和多态。封装的载体是类,封装细节,能提高代码的安全性和复用性。继承和多态本身也是很抽象的概念,需要读者有较宽广的视野,能站在对象共性的高度,把握不同对象的细节和相互关系,从而构建高效和具有良好扩展性和维护性的程序架构。本项目主要介绍继承和多态在Java程序中的实现方法,以及抽象类、接口和内部类在面向对象编程中的应用。项目导读任务1继承与多态任务2抽象类与接口任务3内部类知识梳理继承与多态任务1任务1继承与多态任务引入通过上一个项目的学习,小白了解了面向对象编程的一些基本概念和操作,要编写出面向对象的程序代码,还需要掌握继承和多态的实现方法。在Java中,实现类的继承和多态有哪些常用方法呢?知识准备继承是一种由已有的类创建新类的机制。利用继承,可以先定义一个共有属性的一般类,根据这个一般类再定义具有特殊属性的新类。多态是指同一个行为具有多种不同表现形式。简单来说,就是“对外一种定义,内部多种实现”。Java中的多态有两种意义:操作名称的多态和基于继承实现的多态;实现多态有三个必要条件:继承、重载和向上转型。一、实现继承子类可以继承父类原有的属性和方法,也可以增加自己特有的属性和方法。例如,正方形是一种特殊的四边形,正方形类继承了四边形类的所有属性和方法,还扩展了一些正方形特有的属性和方法。在类的声明中,使用关键字extends声明一个类继承另一个类,定义一个子类一个类可以有多个子类,子类又可以作为父类派生其他子类。任务1继承与多态注意:Java仅支持单继承,也就是说一个类只可以有一个直接的父类。二、方法重写重写(override)也称为覆盖,是指在子类中定义一个方法,该方法的名称和参数列表与父类的成员方法相同,但修改或重新编写了实现内容、返回值类型或访问权限修饰符。也就是说,在Java中重写方法必须满足以下两个条件:子类方法名和父类方法名必须相同参数类型、个数、顺序必须完全相同任务1继承与多态注意:重写父类成员方法的返回值类型是基于JavaSE5.0版本以上编译器的新功能。重写父类方法时,不能降低方法的访问权限,也就是说,只能从小范围向大范围改变。例如,访问权限从高到低为public、protected、private,可以将protected修改为public,但不能修改为private。案例——描述不同交通工具的时速本案例通过继承类与重写方法,描述不同交通工具的行驶速度。任务1继承与多态运行结果三、操作隐藏的父类成员super有两个功能:(1)调用父类的成员变量和方法,(2)调用父类的构造方法。语法格式如下:super.变量名:调用父类的成员变量。super.方法名(参数列表):调用父类的成员方法。super(参数列表):调用父类的有参构造方法。如果没有参数,则调用父类的无参构造方法,此时可以省略不写。任务1继承与多态案例——蝴蝶与动物的关系本实例重写父类的成员方法,并使用super关键字调用父类的构造方法、成员变量和成员方法,演示super关键字的使用方法。任务1继承与多态

运行结果四、使用final关键字在某些情况下,出于安全考虑,不希望类中的方法被重写覆盖或修改,这种情况下可以使用关键字final进行声明。关键字final表示不可改变,不仅可修饰方法,还可修饰类以及类的成员变量。语法格式如下:(1)修饰类(2)修饰类的成员方法(3)修饰类的成员变量任务1继承与多态五、方法重载实现多态方法重载(overload)是面向对象编程多态特性的一种表现形式,具体是指在同一个类中定义多个名字相同但参数不同的方法。同一个方法名就是对外的统一接口,参数列表不同导致内部实现也不同。在Java中,重载方法必须满足以下条件:方法名相同,包括大小写方法的参数列表必须不同,可以是参数的类型、个数或顺序不同方法的返回类型、修饰符可以相同,也可以不同任务1继承与多态注意:“方法重载”与“方法重写”从字面上看很相似,但意义大不相同。除参数列表的要求不一样之外,方法重载可用于同一个类的所有方法,且一个方法在所在的类中可以被重载多次;但方法重写只能用于继承自父类的方法,且只能被子类重写一次。案例——查看联系人信息本案例通过重载构造方法,根据联系人信息的完整程度输出相应的联系人信息。任务1继承与多态运行结果六、对象上转型如果一个类有很多子类,并且这些子类都重写了父类中的某个方法,当把子类创建的对象的引用放到一个父类的对象中时,就得到了该对象的一个上转型对象。由于不同的子类在重写父类的方法时可能产生不同的行为,因此上转型对象在调用这个方法时就具有多种形态。对象上转型的目的是使父类可以调用子类重写的父类的方法,但父类并不能调用子类中独有的属性和方法,也就是说子类会失去其特有的属性和功能。由于向上转型是从一个较具体的类转换到较抽象的类,因此是安全的,程序会自动完成。任务1继承与多态注意:不能直接将父类创建的对象的引用赋值给子类声明的对象。如果子类重写了父类的静态方法,则子类对象的上转型对象只能调用父类的静态方法。案例——描述植物的开花时节本案例通过类转型描述不同植物的开花时节,演示使用类转型简化代码,体现多态性的方法。任务1继承与多态运行结果抽象类与接口任务2任务引入通过上一个任务的学习,小白了解了继承和多态的原理和实现方法,但他并没有浅尝辄止。勤于思考的他想到了一个很实际的问题,如果继承关系链较长,具体的子类好定义,最初的那个父类要包含所有子类的共性,又该如何定义呢?Java只支持单向继承,如果有的子类需要继承多个父类的方法,这种情况又该如何解决呢?知识准备在继承关系中,父类应包含所有子类的共性。如果类的继承关系链较长,则子类会越来越具体,反之,位于顶层的父类会越抽象、通用,有的甚至没有具体的实现方法,以至于不能生成具体的实例。在Java中,这种不能描述一个具体的对象的类称为抽象类,例如植物类。任务2抽象类与接口一、抽象类与抽象方法Java使用关键字abstract修饰抽象类。抽象类在继承体系中常位于顶层,不能被实例化。抽象类中使用abstract修饰的方法称为抽象方法。抽象类中可以包含成员变量、构造方法、抽象方法和具体方法中的全部项或部分项。任务2抽象类与接口注意:构造方法不能定义为抽象方法,用static修饰的类方法也不能定义为抽象方法。二、声明与实现接口如果一个抽象类中的所有方法都是抽象方法,就可以使用接口来定义这个类。接口是一系列抽象方法的声明集合,是一个完全抽象的类,没有方法的实现,具体实现由实现接口的类确定。因此这些方法可以在不同的地方被不同的类实现,从而表现出不同的行为(功能)。接口使用关键字interface声明,语法格式如下:[public]interface接口名称[extends父接口名列表]{//接口体}接口的访问权限可选值为public,如果省略,则使用默认的访问权限。任务2抽象类与接口实例——计算形状的周长和面积本实例声明一个接口,定义计算形状周长和面积的抽象方法,然后定义两个类实现该接口,分别输出圆形和三角形的周长和面积。任务2抽象类与接口运行结果内部类任务3小白在学习网友分享的Java项目时,发现有的程序代码在一个类的内部竟然也定义了一个类。通过请教网友,他知道这种类称为“内部类”。在Java中,内部类的主要作用是什么呢?如何定义内部类呢?知识准备在Java程序开发中,为了更加准确地描述结构体的作用,允许嵌套程序类,即在一个类的内部定义普通类、抽象类或接口,这些在类内部定义的类结构称为内部类,内部类所在的类称作外部类。根据内部类的位置、修饰符和定义的方式可以将内部类分为成员内部类、局部内部类、静态内部类和匿名内部类。任务3内部类任务引入一、成员内部类所谓成员内部类,就是在一个类内部定义,作为类的成员的类。其中,OuterClass类是外部类,InnerClass类是内部类。成员内部类可用static、public、protected和private修饰,而外部类只能使用public或缺省修饰符。需要注意的是,成员内部类中不能定义静态变量。在这里,可能有读者会有疑问,为便于维护程序,通常一个.java文件中只定义一个类。任务3内部类提示:内部类在访问外部类的成员时,可以采用“外部类.this.属性”的形式,明确地表明访问的属性是外部类的属性。案例——销售部的组织结构本案例利用成员内部类表示某企业销售部的组织结构。任务3内部类

运行结果二、局部内部类如果内部类定义在一个类的方法中或者一个作用域中,称为局部内部类。它与成员内部类的区别在于,局部内部类可看作是方法中的一个局部变量,因此不能有public、protected、private以及static修饰符,其访问也仅限于方法内或者该作用域内。任务3内部类案例——计算阶乘本案例使用局部内部类计算给定整数的阶乘。通过该案例演示定义局部内部类的方法。任务3内部类运行结果提示:本例中factorial()的返回值为long类型,因此在调用成员方法compute()并代入参数计算整数的阶乘时,要注意计算结果的范围。如果计算结果超出long类型的取值上限,显示结果可能为负数或0。三、静态内部类静态内部类与成员内部类和局部内部类相似,也是定义在一个类结构中的类,只不过静态内部类需要使用关键字static修饰。定义静态内部类的语法格式如下:修饰符classOuterClass{staticclassInnerClass{//类体}}与类的静态成员属性类似,静态内部类不需要依赖于外部类对象就可以实例化。在外部类或外部类的非静态方法中创建静态内部类对象的语法格式如下:内部类内部类对象=new内部类();任务3内部类案例——欢迎新同学本案例利用静态内部类输出欢迎新同学的文本信息,演示定义静态内部类,以及利用静态内部类访问外部类的静态成员和非静态成员的方法。任务3内部类运行结果四、匿名内部类匿名内部类是在接口和抽象类的应用上发展起来的。所谓匿名内部类,就是没有具体名称的内部类,通常用于类体非常小(只有简单几行),且只需要使用一次的类,作为参数传递给方法,用于实现一个接口或实现一个类。在Swing编程中,经常使用这种方式绑定事件,编写事件监听的代码,不但方便,而且代码容易维护。在Java中创建匿名内部类的语法格式如下:new接口名或抽象类名(){//类体};任务3内部类案例——自我介绍本案例首先创建一个接口,定义自我介绍的方法。然后使用匿名内部类实现接口,输出自我介绍内容。任务3内部类运行结果五、Lambda表达式Lambda表达式是指应用在SAM(SingleAbstractMethod,含有一个抽象方法的接口)环境下的一种简化定义形式,用于简化匿名内部类的定义结构。在Java中,Lambda表达式的基本语法形式如下:(参数,参数,…)->{方法体}; //定义方法体(参数,参数,…)->语句; //直接返回结果其中,参数与要重写的抽象方法的参数一一对应;方法体中具体实现抽象方法。任务3内部类案例——简单的加法运算本案例从控制台获取要进行加法运算的两个整数,然后利用Lambda表达式输出这两个整数的计算结果。通过本案例演示Lambda表达式的使用方法。任务3内部类运行结果项目总结本章项目实战将新建一个实体模型Goods存放商品的名称、数量和入库价格,并重载Goods的构造方法。然后在操作界面中使用类成员的setter()方法和getter()方法访问商品对象的属性。(1)复制并粘贴“进销存管理系统V2.0”,在CopyProject对话框中修改项目名称为“进销存管理系统V3.0”,然后单击Copy按钮关闭对话框。(2)在PackageExplorer窗格中右击项目名称“进销存管理系统V3.0”,从弹出的快捷菜单中选择New→Package命令,新建一个名为model的包。(3)右击model包,从弹出的快捷菜单中选择New→Class命令,新建一个名为Go

温馨提示

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

评论

0/150

提交评论