1、Java是一门面向对象编程语言,Java语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。本模块通过5个任务主要介绍面向相对的思想、类的定义、对象的创建与使用、类与对象之间的关系、构造方法的定义、方法的重载、重写、this关键字、super关键字、抽象类、接口以及封装、继承、多态面向对象的三大特性。模块介绍思维导图教学大纲能力目标能力目标能会用面向对象的思想分析问题能够用继承、封装、多态来解决生活中的实际问题能够使用抽象方法来完成程序设计能够使用面向接口编程的思想解决实际问题知识目标知识目标了解面向对象的思想了解类和对象的概念及其关系掌握对
2、象的创建及其使用掌握方法的使用掌握类的封装方式掌握继承的语法结构和实现步骤掌握多态的定义和适用范围掌握抽象的概念及抽象类的定义和使用掌握接口的定义和实现方式掌握this和super关键字的使用教学大纲学习重点学习重点封装的应用继承的应用多态的应用接口的应用学习难点学习难点多态的应用任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计任务目标任务目标u了解面向对象编程思想u理解类和对象的概念以及两者之间的关系u掌握类的定义u掌握对象的创建和使用任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计近年来,手机已经成为人们日常生活中不可缺少的产品,手机的功能也
3、日趋完善,已延伸到了各个领域。通常,手机包含品牌、价格、颜色等信息,具备打电话,发短信等功能,要求使用Java语言描述“手机类”并创建出两个实际的手机对象。运行效果如图3-1所示。任务描述任务描述图3-1 任务1运行效果图任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计3.1.13.1.1面向对象思想概述面向对象思想概述Java语言是一种面向对象的程序设计语言,而面向对象思想是一种程序设计思想,我们在面向对象思想的指引下,使用Java语言去设计、开发计算机程序。这里的对象泛指现实中一切事物,每种事物都具备自己的属性和行为。面向对象思想就是在计算机程序设计过程中,参照现实
4、中事物,将事物的属性特征、行为特征抽象出来,描述成计算机事件的设计思想。它区别于面向过程思想,强调的是通过调用对象的行为来实现功能,而不是自己一步一步的去操作实现。面向对象思想是一种更符合我们思考习惯的思想,它可以将复杂的事情简单化,并将我们从执行者变成了指挥者。面向对象的语言中,包含了三大基本特征,即封装、继承和多态。知识准备知识准备任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计u 面向过程:把衣服脱下来-找一个盆-放点洗衣粉-加点水-浸泡10分钟-揉一揉-清洗衣服-拧干-晾起来(强调步骤)u 面向对象:把衣服脱下来-打开全自动洗衣机-扔衣服-按钮-晾起来(强调过程
5、)举例举例:任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计3.1.23.1.2类与对象的概念及其关系类与对象的概念及其关系1.1.类的概念类的概念类:是一组相关属性(该事物的状态信息)和行为(该事物能够做什么)的集合。可以看成是一类事物的模板,使用事物的属性特征和行为特征来描述该类事物。任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计2.2.对象的概念对象的概念对象:是一类事物的具体体现。对象是类的一个实例(对象并不是找个女朋友),必然具备该类事物的属性和行为。任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计3.3.类与
6、对象的关系类与对象的关系类是对象的模板,对象是类的实例。接下来通过一个图例来描述类与对象之间的关系,如图3-2所示。图3-2 类与对象任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计3.1.33.1.3类的定义类的定义在面向对象的思想中,类只有通过对象才可以使用,而在开发之中应该先产生类,之后再产生对象。类中封装了一类对象的属性和方法,属性是描述对象的特征,方法描述对象的行为。就是定义类的成员,包括成员变量和成员方法。任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计1.1.类的定义格式及说明类的定义格式及说明修饰符 class 类名 /成员变量
7、/成员方法任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计2.2.类的成员变量类的成员变量类的成员变量也被称作类的属性,它主要用于描述对象的特征。声明成员变量的语法格式如下:修饰符 数据类型 变量名 =值;任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计3.3.类的成员方法类的成员方法类的成员方法也称为方法,主要用于描述对象的行为。定义一个方法的语法格式如下:修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2,,)/方法体return 返回值;任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计3.1.43.1
8、.4对象的创建与使用对象的创建与使用1.1.对象的创建对象的创建类是对象的模板,对象是类的实例。应用程序要想完成具体的功能,仅仅有类是远远不够的,还需要创建该类的实例对象。在Java中,使用关键字 new 来创建一个新的对象。创建对象需要以下三步:l 声明:声明一个对象,包括对象名称和对象类型。l 实例化:使用关键字 new 来创建一个对象。l 初始化:使用 new 创建对象时,会调用构造方法初始化对象。任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计2.2.对象的使用对象的使用创建类的对象是为了能使用类中已定义的成员变量和成员方法。对象成员变量和方法的访问格式如下:对
9、象名.成员变量名;对象名.成员方法名(参数1,参数2);任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计 任务实施任务实施根据任务分析可知,手机类的成员变量包括;品牌、价格、颜色,成员方法包括:打电话、发短信。编写测试类分别声明对象进行调用。任务任务3.1 3.1 描述描述“手机类手机类”信息程序设计信息程序设计 实践训练实践训练编写一个“课程类”,其中成员变量包括年级、课程编号、课时数,成员方法display(),用于显示课程的信息,并编写测试类进行对象的创建。任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计任务目标任务目标u掌握构造方法的定义
10、和使用u掌握this关键字的使用u掌握方法重载的实现方式任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计在生产生活中,我们时时刻刻离不开计算,计算器作为一种计算工具,与我们的日常生活息息相关。本任务通过面向对象的思想完成简单计算器的程序设计,实现计算器加减乘除运算。运行效果如图3-3所示。任务描述任务描述图3-3 任务2运行效果图任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计3.2.13.2.1构造方法构造方法在类中除了成员方法外,还有一种特殊类型的方法称为构造方法,当一个对象被创建时候,构造方法用来初始化该对象。构造方法的特殊性体现在以下几个
11、方面:构造方法的名字必须与类的名字完全相同。构造方法没有返回值。在创建对象时,系统会自动调用类的构造方法。构造方法一般用public关键字声明,这样才能在程序任意位置创建对象。每个类至少有一个构造方法。如果不定义构造方法,Java将提供一个默认的不带参数且方法体为空的构造方法。知识准备知识准备任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计构造方法的定义格式:修饰符方法名(参数类型 参数名1,参数类型 参数名2,,)/方法体任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计3.2.2 this3.2.2 this关键字关键字Java中提供了一个关键
12、字this,this代表所在类的当前对象的引用(地址值),即对象自己的引用。(方法被哪个对象调用,方法中的this就代表那个对象。即谁在调用,this就代表谁。)接下来将详细讲解this关键字在程序中的3种常见用法,具体如下。任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计(1)通过this关键字调用成员变量,解决与局部变量名称冲突问题。class Person int age;/成员变量age public Person(int age)/局部变量age this.age=age;/将局部变量age的值赋值给成员变量age /定义 speak()方法 public v
13、oid speak()System.out.println(我今年+age+岁了!);public class Example3_3 public static void main(String args)Person p=new Person(18);/实例化Person对象 p.speak();任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计(2)在本类的成员方法中,访问本类的另一个成员方法。具体代码如下:class Person/定义 openMouth()方法 public void openMouth()System.out.println(我张开嘴!);/定
14、义 speak()方法public void speak()this.openMouth();System.out.println(我今年+age+岁了!);在上面的speak()方法中,使用this关键字调用了openMouth()方法,此处的关键字this也可以省略不写。任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计(3)在本类的构造方法中,访问本类的另一个构造方法。具体代码如下:class Person public Person()System.out.println(无参的构造方法被调用了.);public Person(int age)this();/调用
15、无参的构造方法 System.out.println(有参的构造方法被调用了.);任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计注意:注意:只能在构造方法中使用this调用其他的构造方法,不能在成员方法中使用;在构造方法中,使用this调用构造方法的语句必须是该方法的第一条执行语句,且只能出现一次;不能在一个类的两个构造方法中使用this互相调用任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计3.2.3 3.2.3 方法重载方法重载方法重载:指在同一个类中,允许存在一个以上的同名方法,只要它们的参数不同即可,与修饰符和返回值类型无关。参数不同包
16、括:参数的个数不同,数据类型不同,顺序不同,主要体现在一下几个方面。任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计(1)参数类型不同。例如:upublic void show(String s);upublic void show(int s);(2)参数个数不同。例如:upublic void show(String s,int i);upublic void show(String s);(3)参数顺序不同。例如:upublic void show(String s,int i);upublic void show(int i,String s);任务任务3.2
17、3.2 实现简单实现简单“计算器计算器”程序设计程序设计 任务实施任务实施分析任务,运用面向对象的编程思想,定义一个计算器类,类中有两个数值型的属性,定义四种方法,分别实现加、减、乘、除运算。编写测试类分别声明对象进行调用。任务任务3.2 3.2 实现简单实现简单“计算器计算器”程序设计程序设计 实践训练实践训练编写一个程序,实现设置上月、本月天然气读数,显示本月、上月燃气表读数,计算并显示本月使用燃气方数,假设每方燃气费的价格为3.4元,计算并显示本月天然气费用。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计任务目标任务目标u理解封装的意义u掌握封装的实现步骤u掌握Ja
18、va修饰符u掌握static关键字的使用任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计在现实生活中,人的姓名、年龄和体重都有一定的规范。要求使用封装完成对属性的控制,当姓名、年龄、体重输入错误时,给出相应的提示。运行效果如图3-4所示。任务描述任务描述图3-4 任务3运行效果图任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计3.3.13.3.1封装封装封装是面向对象的三大特征之一,理解并掌握封装对学习Java面向对象的内容非常的重要。知识准备知识准备任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计1.1.为什么需要封装?为什么需要封
19、装?通过一个例子先来了解为什么需要对类进行封装,如例3-5所示。class PersonString name;int age;public void speak()System.out.println(我叫+name+,今年+age+岁了);public class Example3_5public static void main(String args)Person p=new Person();p.name=张三;p.age=20;p.speak();例例3-5 Example3_5.java3-5 Example3_5.java任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序
20、设计程序设计1.1.为什么需要封装?为什么需要封装?在例3-5中,通过name=张三、p.age=20这两行代码对姓名和年龄进行赋值,语法上没有任何问题,但是在现实生活中姓名和年龄一般比较隐私,为了对类中的属性进行更好的控制,应该对成员变量的访问做出一些限定,这就需要用到封装。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计2.2.封装的概念封装的概念面向对象编程语言是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改。封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码
21、更容易理解与维护,也加强了代码的安全性。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计3.3.封装的实现步骤封装的实现步骤(1)使用 private 关键字来修饰成员变量。代码如下:class Person private String name;private int age;任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计(2)对需要访问的成员变量,提供对应的一对getXxx方法、setXxx方法。class Person private String name;private int age;public String getName()retu
22、rn name;public void setName(String name)this.name=name;public int getAge()return age;public void setAge(int age)this.age=age;任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计3.3.2Java3.3.2Java修饰符修饰符Java语言提供了很多修饰符,主要分为访问修饰符和非访问修饰符两大类。访问修饰符主要包括private、default、protected、public等;Java的非访问修饰符有static、final、abstract、adbst
23、ract、synchronized、volatile等(将在后续章节逐一介绍)。Java中,可以使用访问控制符来保护对类、变量、方法和构造方法的访问。Java 支持4种不同的访问权限,如表3-1所示。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计访问范围访问范围privateprivatedefaultdefaultprotectedprotectedpublicpublic同一类中同一类中同一包中同一包中 子类中子类中 全局范围全局范围 表3-1访问控制修饰符作用范围任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计3.3.3static3.3.3st
24、atic关键字关键字关于static关键字的使用,它可以用来修饰成员变量、成员方法以及代码块,被修饰的成员是属于类的,而不是单单是属于某个对象的。也就是说,既然属于类,就可以不靠创建对象来调用了。static 修饰的内容:l 是随着类的加载而加载的,且只加载一次。l 存储于一块固定的内存区域(静态区),所以,可以直接被类名调用。l 它优先于对象存在,所以,可以被所有对象共享。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计1.1.静态变量静态变量当static修饰成员变量时,该变量称为类变量。该类的每个对象都共享同一个类变量的值。任何对象都可以更改该类变量的值,但也可以在不
25、创建该类的对象的情况下对类变量进行操作。static 数据类型 变量名;任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计2.2.静态方法静态方法当static修饰成员方法时,该方法称为类方法。静态方法在声明中有 static,建议使用类名来调用,而不需要创建类的对象。定义格式:修饰符 static 返回值类型 方法名(参数列表)/执行语句 任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计注意:注意:静态方法可以直接访问类变量和静态方法。静态方法不能直接访问普通成员变量或成员方法。反之,成员方法可以直接访问类变量或静态方法。静态方法中,不能使用 this关
26、键字。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计3.3.静态代码块静态代码块静态代码块:定义在成员位置,使用static修饰的代码块。位置:类中方法外。执行:随着类的加载而执行且执行一次,优先于 main方法和构造方法的执行。定义格式:public class ClassName static /执行语句 任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计 任务实施任务实施根据任务分析可知:(1)需要定义属性姓名、年龄、体重,并将其设置为私有的;(2)分别对姓名、年龄、体重这是三个属性设置一对getXxx方法、setXxx方法;(3)在类中定义相应的
27、功能方法。(4)编写测试类分别声明对象进行调用。任务任务3.3 3.3 个人个人“信息隐私信息隐私”程序设计程序设计 实践训练实践训练通过封装编写水果类,模拟水果的买卖过程。要求:类具有名称、价格、数量,其中,价格不能低于0,否则显示“水果价格不符合常规,请重新输入!”,数量不能低于0,否则显示“库存不足,请选择其他水果。”;为各属性设置赋值和取值方法;编写方法detail(),在控制台中打印水果的基本信息。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计任务目标任务目标u掌握继承的概念及其实现方式u掌握方法的覆盖u掌握super关键字任务任务3.4“3.4“大学生类
28、大学生类”继承关系程序设计继承关系程序设计现在大学生中,专科生和本科生占多数,分别使用类表示这两类大学生。要求大学生类属性包括姓名、年龄,行为包括显示学生信息;专科类属性除了包括姓名、年龄,增加学历属性,行为除了包括显示学生的信息(重写父类的方法),增加学习(内容为“我的学习侧重于实操。”)的行为;专科类属性除了包括姓名、年龄,增加学历、学位属性,行为除了包括显示学生的信息(重写父类的方法),增加学习(内容为“我的学习侧重于理论。”)的行为。使用类的继承管理学生的基本信息。运行效果如图3-5所示。任务描述任务描述任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计任务描述
29、任务描述图3-5 任务4运行效果图任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计3.4.13.4.1继承继承继承是面向对象程序设计思想中最重要的一个特性。继承简化了人们对事物的认识和描述,能清晰体现相关类间的层次结构关系;继承提供了软件复用功能。这种做法能减小代码和数据的冗余度,大大增加程序的重用性;提供多重继承机制。知识准备知识准备任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计1.1.继承的概念继承的概念在生活中,也存在很多继承关系,所属人会想到子女继承父辈的财产、事业等。例如兔子和羊属于食草动物类,狮子和豹属于食肉动物类。食草动物和食
30、肉动物又是属于动物类。虽然食草动物和食肉动物都是属于动物,但是两者的属性和行为上有差别,所以子类会具有父类的一般特性也会具有自身的特性。如图3-6所示。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计继承描述的是事物之间的所属关系,就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。图3-6 动物继承关系图任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计2.2.继承的实现继承的实现修饰符 class 子类名 extends 父类名/核心代码任务任务3.4“3.4“大学生类大学
31、生类”继承关系程序设计继承关系程序设计注意:注意:在Java中,类只支持单继承,不允许多重继承,也就是说一个类只能有一个直接父类。多个类可以继承一个父类。在Java中,多层继承是可以的,即一个类的父类可以再去继承另外的父类。子类和父类是一种相对概念,也就是说一个类是某个类父类的同时,也可以是另一个类的子类。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计3.4.23.4.2方法的重写方法的重写子类中出现与父类一模一样的方法时(返回值类型,方法名和参数列表都相同),会出现覆盖效果,称为方法重写,也称为方法覆盖。声明不变,重新实现。任务任务3.4“3.4“大学生类大学生类
32、”继承关系程序设计继承关系程序设计注意:注意:子类方法覆盖父类方法,必须要保证权限大于等于父类权限。如:父类中的方法是public,子类的方法就不能是private。子类方法覆盖父类方法,返回值类型、函数名和参数列表都要一模一样。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计3.4.3 super3.4.3 super关键字关键字super关键字:我们可以通过super关键字来实现对父类成员的访问。super关键字主要有两种用法:(1)使用super关键字可以调用父类的成员变量和成员方法。(2)使用super关键字访问父类的构造方法。super关键字用来引用当前对象
33、的父类,this关键字是指向自己的引用。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计3.4.4 final3.4.4 final关键字关键字学习了继承后,我们知道,子类可以在父类的基础上改写父类内容,比如,方法重写。那么我们能不能随意的继承API中提供的类,改写其内容呢?显然这是不合适的。为了避免这种随意改写的情况,Java提供了 final 关键字,用于修饰不可改变内容。final关键字可以用于修饰类、变量和方法。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计(1)类:被修饰的类,不能被继承。如例3-12所示。/使用final关键字修
34、饰Animal类final class Animal/Dog类继承Animal类class Dog extends Animal/定义测试类public class Example3_12 public static void main(String args)Dog dog=new Dog();/创建Dog类的实例对象 例例3-12 Example3_12.java3-12 Example3_12.java任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计运行程序报错,如图3-7所示。图3-7 例3-12运行结果任务任务3.4“3.4“大学生类大学生类”继承关系程序设
35、计继承关系程序设计(2)方法:被修饰的方法,不能被重写。如例3-8所示。例例3-13 Example3_13.java3-13 Example3_13.java/定义Animal类class Animal /使用final关键字修饰shout()方法 public final void eat()/定义Dog类继承Animal类class Dog extends Animal /重写Animal类的shout()方法 public void eat()/定义测试类public class Example3_13 public static void main(String args)Dog d
36、og=new Dog();/创建Dog类的实例对象 任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计运行程序报错,如图3-8所示。图3-8 例3-13运行结果任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计(3)变量:被修饰的变量,不能被重新赋值。如例3-14所示。例例3-14 Example3_14.java3-14 Example3_14.javapublic class Example3_14 public static void main(String args)final int NUM=2;/第一次可以赋值 /NUM=4;/再次赋
37、值会报错 任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计运行程序报错,如图3-9所示。图3-9 例3-14运行结果任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计 任务实施任务实施根据任务分析可知:(1)需要定义三个类,分别为大学生类、专科生类、本科生类,其中,专科生类、本科生类继承自大学生类;(2)大学生类属性包括姓名、年龄,行为包括:学习;专科生类属性包括:姓名、年龄、学历,行为包括:学习、显示学生信息(需要对父类方法进行重写);本科生类属性包括:姓名、年龄、学历、学位,行为包括:学习、显示学生信息(需要对父类方法进行重写);(3)编写
38、测试类分别声明对象进行调用。任务任务3.4“3.4“大学生类大学生类”继承关系程序设计继承关系程序设计 实践训练实践训练教师一般分专任教师岗位和行政管理岗位,在两个类中一般都包含姓名、年龄、性别等基本属性,方法为显示教师信息。专任教师岗位中属性还包含职称,行政管理岗位中属性还包含职务。使用类的继承管理教师的基本信息。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计任务目标任务目标u掌握抽象类的概念和实现方式u掌握接口的概念及其使用u掌握多态的使用任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计笔记本电脑(laptop)
39、通常具备使用USB设备的功能。在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。进行描述笔记本类,实现笔记本使用USB鼠标、USB键盘。具体要求如下:(1)USB 接口,包含开启功能、关闭功能;(3)鼠标类,要实现 USB接口,并具备点击的方法;(4)键盘类,要实现 USB接口,具备敲击的方法;(5)笔记本类,包含运行功能、关机功能、使用 USB设备功能。运行效果如图3-10所示。任务描述任务描述任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计任务描述任务描述图3-10 任务
40、5运行效果图任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计3.5.13.5.1抽象类抽象类父类中的方法,被它的子类们重写,子类各自的实现都不尽相同。那么父类的方法声明和方法主体,只有声明还有意义,而方法主体则没有存在的意义了。我们把没有方法主体的方法称为抽象方法。Java语法规定,包含抽象方法的类就是抽象类。知识准备知识准备任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计1.1.抽象方法抽象方法使用 abstract 关键字修饰方法,该方法就成了抽象方法,抽象方法只包含一个方法名,而没有方法体。定义格式:修饰符 ab
41、stract 返回值类型 方法名(参数列表);任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计2.2.抽象类抽象类如果一个类包含抽象方法,那么该类必须是抽象类。定义格式:abstract class 类名字 任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计注意:注意:抽象方法:必须使用abstract关键字来修饰,并且在定义方法时不需要实现方法体。抽象类:当一个类中包含了抽象方法,那么该类也必须使用abstract关键字来修饰,这种使用abstract关键字修饰的类就是抽象类。抽象类里边除了有抽象方法,还包含普通方法。
42、抽象类是不可以被实例化的,如果想调用抽象类中定义的抽象方法,需要创建一个子类,在子类中实现抽象类中的抽象方法。子类必须重写父类所有的抽象方法。否则,该子类也必须声明为抽象类。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计3.5.23.5.2接口接口Java语言只支持单继承,不支持多继承。一般情况下,单继承就可以解决大部分子类对父类的继承问题。但是,当问题复杂时,若只使用单继承,可能会给设计带来很多麻烦,这时就需要用到接口。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计1.1.接口的定义接口的定义接口,是Java语言
43、中一种引用类型,是方法的集合,如果说类的内部封装了成员变量、构造方法和成员方法,那么接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JDK 8),私有方法(JDK 9)。接口和抽象类相似,但又有一些差异,可以把接口理解为一个特殊的抽象类。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计注意:注意:在接口中定义常量时,可以省略“public static final”修饰符,接口会默认为常量添加“public static final”修饰符。与此类似,在接口中定义抽象方法时,也可以省略“public abstract”修
44、饰符,定义default默认方法和static静态方法时,可以省略“public”修饰符,定义私有方法时,可以省略“public”修饰符,这些修饰符系统都会默认进行添加。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计2.2.接口的实现接口的实现类与接口的关系为实现关系,即类实现接口,该类可以称为接口的实现类,也可以称为接口的子类。实现的动作类似继承,格式相仿,只是关键字不同,实现使用implements关键字。实现格式:class 类名 extends 父类名 implements 接口名1,接口名2,任务任务3.5 3.5 模拟模拟“笔记本笔记本”US
45、B”USB接口程序设计接口程序设计注意:注意:当一个类实现接口时,如果这个类是抽象类,只需实现接口中的部分抽象方法即可,否则需要实现接口中的所有抽象方法。一个类可以通过implements关键字同时实现多个接口,被实现的多个接口之间要用英文逗号(,)隔开。接口之间可以通过extends关键字实现继承,并且一个接口可以同时继承多个接口,接口之间用英文逗号(,)隔开。一个类在继承一个类的同时还可以实现接口,此时,extends关键字必须位于implements关键字之前。接口中,无法定义成员变量,但是可以定义常量,其值不可以改变,默认使用 public static final修饰。接口中,没有构
46、造方法,不能创建对象。接口中,没有静态代码块。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计3.5.33.5.3多态多态多态是继封装、继承之后,面向对象的第三大特性。生活中,比如跑的动作,小猫、小狗和大象,跑起来是不一样的。再比如飞的动作,昆虫、鸟类和飞机,飞起来也是不一样的。可见,同一行为,通过不同的事物,可以体现出来的不同的形态。多态,描述的就是这样的状态。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计1.1.多态的概念多态的概念多态是同一个行为具有多个不同表现形式或形态的能力。多态就是同一个接口,使用不同的实
47、例而执行不同操作,如图3-11所示。图3-11 打印机任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计2.2.多态的体现多态的体现多态体现的格式:父类类型:指子类对象继承的父类类型,或者实现的父接口类型。父类类型 变量名=new 子类对象;变量名.方法名();任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计3 3.引引用类型转换用类型转换多态的转型分为向上转型与向下转型两种:向上转型:多态本身是子类类型向父类类型向上转换的过程,这个过程是默认的。当父类引用指向一个子类对象时,便是向上转型。使用格式:父类类型 变量名=n
48、ew 子类类型();如:Animal a=new Dog();任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计向下转型:父类类型向子类类型向下转换的过程,这个过程是强制的。一个已经向上转型的子类对象,将父类引用转为子类引用,可以使用强制类型转换的格式,便是向下转型。使用格式:子类类型 变量名=(子类类型)父类变量名;如:Dog dog=(Dog)a;当使用多态方式调用方法时,首先检查父类中是否有该方法,如果没有,则编译错误。也就是说,不能调用子类拥有,而父类没有的方法。编译都错误,更别说运行了。这也是多态给我们带来的一点小麻烦。所以,想要调用子类特有的方法
49、,必须做向下转型。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计 任务实施任务实施根据任务分析可知:(1)定义USB 接口,包含开启功能、关闭功能的抽象方法;(2)定义笔记本类,包含运行功能、关机功能、使用 USB设备功能的方法;(3)定义鼠标类,实现 USB接口,并具备点击的方法;(4)定义键盘类,实现 USB接口,具备敲击的方法;(5)编写测试类进行测试。任务任务3.5 3.5 模拟模拟“笔记本笔记本”USB”USB接口程序设计接口程序设计 实践训练实践训练现有正方形(边长为5m)及圆形(半径为3m)花池各一个,通过接口分别完成正方形、圆形花池的周长
50、和面积的计算。要求如下:(1)设计一个FlowerBed接口和它的两个实现类Square(正方形)和Circle(圆形)。FlowerBed接口中包含抽象方法perimeter(周长)和area(面积);(2)Square和Circle类中实现FlowerBed接口的perimeter()、area()抽象方法,分别求正方形和圆形的周长、面积并返回。(3)编写测试类进行测试。模块模块小结小结 本章通过五个任务让我们了解了面向对象的基础知识。介绍了面向对象的思想、类的定义、对象的创建与使用、类与对象之间的关系、构造方法的定义、方法的重载、重写、this关键字、super关键字、抽象类、接口以及封