ch04_Java面向对象编程技术.ppt_第1页
ch04_Java面向对象编程技术.ppt_第2页
ch04_Java面向对象编程技术.ppt_第3页
ch04_Java面向对象编程技术.ppt_第4页
ch04_Java面向对象编程技术.ppt_第5页
已阅读5页,还剩100页未读 继续免费阅读

下载本文档

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

文档简介

第4讲Java面向对象编程技术 授课教师 赵翠 2 本课目标 3 面向对象的基本概念 1 对象对象 Object 就是客观存在的任何事物 2 类类 class 是对象的模板 即类是对一组有相同静态特性和相同动态行为的对象的抽象 一个类所包含的属性和方法描述一组对象的共同属性和行为 类是在对象之上的抽象 对象则是类的具体化 是类的实例 4 面向对象的基本概念 3 接口如果我们把客观世界看成由不同的系统 或类 组成 这些系统 或类 之间需要通过一个公共的部件进行交流 我们把这个公共的部件称为接口 Interface 4 消息消息就是对象之间进行通信的一种规格说明 对象之间进行交互作用和通信的工具 5 面向对象的基本特性 1 封装性封装是一种信息隐蔽技术 它体现于类的说明中 是对象的重要特性 封装的目的在于把对象的设计者和对象的使用者分开 使用者不需要知道行为实现的细节 只需用设计者提供的消息来访问该对象 在Java语言中 类是封装的最基本单位 封装有助于提高类和系统的安全性 6 面向对象的基本特性 2 继承性继承是类不同抽象级别之间的关系 是子类自动共享父类数据和方法的机制 3 多态性对象根据所接收的消息产生行为 同一消息为不同的对象接收时可产生完全不同的行动 这种现象称为多态性 多态允许对任意指定的对象自动地使用正确的方法 并通过在程序运行过程中将对象与恰当的方法进行动态绑定来实现 7 类的定义 Java中的类的定义包括类声明和类体两部分内容 类声明的格式如下 public abstract或final class类名 extends父类名 implements接口名表 类体的通用格式如下 public abstract或final class类名 extends父类名 implements接口名表 成员域定义部分 方法定义部分 8 类的三种基本成员 构造函数成员变量成员函数 静态成员变量 类变量 用static修饰 非静态成员变量 实例变量 不用static修饰 静态成员函数 类函数 用static修饰 非静态成员函数 实例函数 不用static修饰 static修饰的成员不能访问没有static修饰的成员 成员变量的定义 在变量定义时 可同时给其赋初值 将其初始化类的成员变量定义的一般格式如下 存取修饰符 final static 类型变量名 值或表达式 变量名 值或表达式 10 成员方法定义 方法是一个包含一条或多条语句的代码块 用来完成一个相对独立的功能方法有自己的名称以及可以重复使用的变量与类成员变量一样 方法也分为类方法 也称为静态方法 和实例方法两种 类的成员方法定义的一般格式如下 存取修饰符 static final或abstract 方法返回类型 方法名 形式参数表 throws异常表 可执行代码 12 构造方法 构造方法的主要用途有两个 一是通知Java虚拟机创建类的对象 二是对创建的对象进行初始化如果在程序中没有显式的定义类的构造方法 Java编译器将自动提供一个构造方法 称为默认构造方法注意 构造方法既不能定义返回值类型 也不能使用void定义构造方法没有返回值 如果定义了返回值类型 或使用void声明构造方法没有返回值 编译不会出错 但Java会把构造方法当初方法来处理 publicclassPerson 下面定义了Person类的两个属性publicStringname publicintage 下面定义了一个say方法publicvoidsay Stringcontent System out println content 14 创建对象 1 创建对象的步骤在已经定义好的类的基础上 创建对象的过程分为如下3步 1 创建对象引用变量 2 创建类的实例对象 3 将对象的引用赋值给对象引用变量 15 创建对象 2 new运算符通过new运算符创建对象时 Java虚拟机将在堆中开辟一个内存空间 用于存放对象的实例变量 并根据指定的构造方法和类的定义初始化这些实例变量 new运算符的一般格式为 对象引用变量 new对象构造方法 3 调用对象的成员对象的成员 实例变量与实例方法 的调用采用 运算符 引用的一般格式为 对象引用变量 类 类的成员 对象的产生及使用 Personp P newPerson 或Personp newPerson Personp p newPerson p name 李刚 p say Java语言很简单 学习很容易 System out println p name Personp2 p 对象 引用 指针 Personp newPerson 对象在内存中存储图 引用变量指向实际对象示意图 成员变量和局部变量 访问类变量类 类变量访问成员变量类 成员变量 成员变量使用 publicclassPerson publicStringname publicstaticinteyeNum publicclassTestPerson publicstaticvoidmain String args System out println Person的eyeNum类属性值 Person eyeNum Personp newPerson System out println p变量的name属性值是 p name p对象的eyeNum属性值是 p eyeNum p name 孙悟空 p eyeNum 2 System out println p变量的name属性值是 p name p对象的eyeNum属性值是 p eyeNum System out println Person的eyeNum类属性值 Person eyeNum Personp2 newPerson System out println p2对象的eyeNum类属性值 p2 eyeNum 成员变量无须显式初始化 局部变量 局部变量作用局 publicclassTestBlock publicstaticvoidmain String args inta System out println 代码块局部变量a的值 a a 5 System out println 代码块局部变量a的值 a System out println a 成员变量与局部变量同名 Java允许局部变量和成员变量同名 如果方法里的局部变量和成员变量同名 局部变量会覆盖成员变量 如果需要在这个方法里引用被覆盖的成员变量 可以使用this作为调用者来限定访问成员变量 成员变量与局部变量同名 publicclassTestVariableOverride privateStringname 李刚 privatestaticdoubleprice 78 0 publicstaticvoidmain String args intprice 65 System out println price System out println TestVariableOverride price newTestVariableOverride info publicvoidinfo Stringname 孙悟空 System out println name System out println this name 成员变量的初始化和内存中的运行机制 当系统加载类或创建该类的实例时 系统自动为成员变量分配内存空间 并在分配内存空间后 自动为成员变量指定初始值 Personp1 newPerson Personp2 newPerson p1 name 张三 p2 name 孙悟空 p1 eyeNum 2 p2 eyeNum 3 初始化Person类 Personp1 newPerson p1 name 张三 p2 name 孙悟空 局部变量的初始化和内存中的运行机制 局部变量定义后 必须经过显式初始化后才能使用 系统不会为局部变量执行初始化 即定义局部变量后 系统并未为这个变量分配内存空间 直到程序为这个变量赋初始值时 系统才会为局部变量分配内存 并将该值保存到内存中 局部变量是基本数据类型时 直接把这个变量的值的保存到内存中 如果局部变量是引用类型 则这个变量里存放的是地址 局部变量的初始化和内存中的运行机制 publicclassTestScope1 定义一个成员变量作为循环变量staticinti publicstaticvoidmain String args for i 0 i 10 i System out println Hello 局部变量的初始化和内存中的运行机制 publicclassTestScope2 publicstaticvoidmain String args 定义一个方法局部变量作为循环变量inti for i 0 i 10 i System out println Hello 局部变量的初始化和内存中的运行机制 publicclassTestScope3 publicstaticvoidmain String args 定义一个代码块局部变量作为循环变量for inti 0 i 10 i System out println Hello 成员方法 成员方法不能独立定义 方法只能在类体里定义从逻辑意义上来看 方法要么属于该类本身 要么属于该类的一个对象 永远不能独立运行 执行方法必须使用类或对象进行调用 成员方法的参数传递 基本数据类型值传递 publicclassTestPrimitiveTransfer publicstaticvoidswap inta intb inttmp a a b b tmp System out println swap方法里 a的值是 a b的值是 b publicstaticvoidmain String args inta 6 intb 9 swap a b System out println 交换结束后 实参a的值是 a 实参b的值是 b main方法中定义了a b变量 main方法中的变量作为参数值传入swap方法 swap方法中a b交换之后存储示意图 成员方法的参数传递 引用数据类型值传递 classDataWrap publicinta publicintb publicclassReferenceTransferTest publicstaticvoidswap DataWrapdw inttmp dw a dw a dw b dw b tmp System out println swap方法里 aField的值是 dw a bField的值是 dw b dw null publicstaticvoidmain String args DataWrapdw newDataWrap dw a 6 dw b 9 swap dw System out println 交换结束后 aField的值是 dw a bField的值是 dw b main方法中创建了DataWrap对象后存储图 main方法中dw传入swap方法后存储图 将swap方法的dw赋值为null后存储图 对象的this引用 This作为对象的默认引用有两种情形 1 构造函数中该构造函数正在初始化的对象2 在方法中引用调用该方法的对象 publicclassDog publicvoidjump System out println 正在执行jump方法 publicvoidrun Dogd newDog d jump 使用this引用调用run 方法的对象 this jump System out println 正在执行run方法 publicclassDogTest publicstaticvoidmain String args 创建Dog对象Dogdog newDog 调用Dog对象的run方法dog run publicclassDog publicvoidjump System out println 正在执行jump方法 publicvoidrun jump System out println 正在执行run方法 一般来说 如果调用static修士的成员 包括成员变量和成员函数 时省略了前面的主调 那么默认使用该类作为主调 如果调用没有static修饰的成员 包括成员变量和成员函数 时省略了前面的主调 那么默认使用this作为主调 Java编程时不要使用对象去调用static修饰的成员变量 成员函数 而是应该使用类去调用 需要使用对象调用静态成员函数时 publicclassThisInConstructor publicintfoo publicThisInConstructor intfoo 0 this foo 6 publicstaticvoidmain String args System out println newThisInConstructor foo 51 类的继承 在Java中 从一个现有类的基础上定义新的类的过程称为派生 新定义的类称为派生类 也称为直接子类 基础类称为父类或超类 这种一个类派生出另一个类的关系即为继承关系 一个派生类将继承其父类的所有特性和操作 如果要创建一个继承父类的子类 只需在类的声明中通过extends关键字指定要继承的类名就可以 52 课堂演示 编写描述大学生的Java类 案例4 2 编写描述大学生的Java类 案例学习目标 理解继承的基本思想 理解父类和子类的关系 能在父类的基础上创建子类 案例知识要点 父类和子类的概念 子类的实现 extends关键字 案例完成步骤 编写程序编译并运行程序 53 课堂演示 编写描述大学生的Java类 编写程序publicclassCollegeextendsStudent privateStringsMajor publicvoidgetMajor System out println 专业 sMajor 调用子类的实例变量System out println 身高 dHeight 引用父类的实例变量 publicstaticvoidmain String args Collegewangym wangym newCollege wangym getInfo 调用父类的实例方法wangym getMajor 调用子类的实例方法 54 课堂演示 编写描述大学生的Java类 运行结果 55 学生模仿 2 56 教师示范与讲解 3 任务一 方法重载与方法重写 案例分析 57 this和super this代表当前对象本身 通过this变量不仅可以引用当前对象的实例变量 也可引用当前对象的实例方法 但由于类变量与类方法不属于具体的类对象 因此不能通过this变量引用类变量和类方法 在类方法中也不能使用this变量 在引用实例变量时 使用this变量是一种很好的习惯 它能使程序更加清晰 且不容易出错 super代表当前类的父类 通过super可以调用父类的构造方法和父类的成员 成员变量和成员方法 58 方法重载与方法重写 方法重载指类的同名方法在向其传递不同的参数时可以有不同的动作 实现不同的功能子类从父类中继承方法时 需要修改父类中定义的方法 即只修改方法体 方法的参数类型 个数 顺序以及返回值保持相同 这就是方法的重写 59 课堂演示 方法重载与方法重写 案例4 3 方法重载与方法重写 案例学习目标 理解方法重载的含义和应用场合 理解方法重写的含义和应用场合 掌握实现方法重载的方法 掌握实现方法重写的方法 能在实际应用中合理选择方法重载或方法重写 案例知识要点 方法重载的含义 方法重写的含义 方法重载的方法 方法重写的方法 案例完成步骤 编写程序编译并运行程序 60 课堂演示 方法重载与方法重写 编写方法重载的程序publicclassOverLoadDemo voidpurchase System out println 买菜 voidpurchase Stringwhat System out println 买 what voidpurchase Stringwhat intnumber System out println 买 number 斤 what voidpurchase Stringwhat Stringwhere System out println 到 where 买 what 61 课堂演示 方法重载与方法重写 voidpurchase Stringwhat intnumber Stringwhere System out println 到 where 买 number 斤 what voidpurchase Stringwhat intnumber Stringwhere Stringwhen System out println when 到 where 买 number 斤 what publicstaticvoidmain Stringargs OverLoadDemoold newOverLoadDemo old purchase old purchase 大米 old purchase 大米 100 old purchase 大米 步步高超市 old purchase 大米 100 步步高超市 old purchase 大米 100 步步高超市 下午 62 课堂演示 方法重载与方法重写 方法重载运行结果 63 课堂演示 方法重载与方法重写 编写方法重写的程序classStu StringsName voiddisplay Stringname System out println 我是一名学生 我的名字是 name classCollegeStuextendsStu StringsMajor voiddisplay Stringname System out println System out println 我是一名大学生 我的名字是 name sMajor 计算机 System out println 我学习的专业是 sMajor 64 课堂演示 方法重载与方法重写 classMiddleStuextendsStu StringsSubject voiddisplay Stringname System out println System out println 我是一名中学生 我的名字是 name sSubject 理科 System out println 我学习的科目是 sSubject 65 课堂演示 方法重载与方法重写 publicclassOverrideDemo publicstaticvoidmain Stringargs Stustu newStu CollegeStucstu newCollegeStu MiddleStumstu newMiddleStu Stus s stu s display 刘津 s cstu s display 王咏梅 s mstu s display 刘志成 66 课堂演示 方法重载与方法重写 方法重写运行结果 67 学生模仿 3 68 教师示范与讲解 4 69 抽象类与抽象方法 在面向对象分析设计时 可将一些实体作高度抽象定义成抽象类 抽象类没有任何对象 只可作为一个模板用于创建子类 以及为面向对象提供更灵活的多态机制抽象类定义的一般格式如下 public abstractclass类名 extends父类名 implements接口名表 方法体 70 抽象类与抽象方法 抽象类的声明 必须在class关键字之前添加abstract关键字 抽象类与其他类一样 可继承于其他类 也可实现接口 但定义抽象类的主要目的就是为了创建子类 因此abstract类不可以是final类 抽象类中可以不包含抽象方法 但包含抽象方法的类必须是抽象类 抽象方法声明的一般格式如下 存取修饰符 abstract 方法返回类型 方法名 形式参数表 throws异常表 71 Final修饰符 出于保密或其他设计上的原因 希望类或类中成员变量 成员方法不被修改或重写 可以通过Java提供的final修饰符来实现在类定义时 可使用final修饰符使类不被继承在定义成员变量时 可通过final修饰符定义常量在定义方法时 可使用final修饰符避免方法被子类重写 72 课堂演示 定义形状 案例4 4 定义形状 案例学习目标 了解抽象类的定义方法 掌握由抽象类得到具体类的方法 能根据实际应用编写抽象类和具体类 案例知识要点 抽象类的定义 抽象类和具体类的关系 abstract关键字 案例完成步骤 编写程序编译并运行程序 73 课堂演示 定义形状 编写程序abstractclassShape publicabstractvoidgetArea classCircleextendsShape finaldoublePI 3 1415926 doubledRadius publicvoidgetArea System out println 圆的面积为 PI dRadius dRadius publicCircle doubler this dRadius r 74 课堂演示 定义形状 classRectangleextendsShape doubledLength doubledWidth publicvoidgetArea System out println 矩形的面积为 dLength dWidth publicRectangle doublel doublew this dLength l this dWidth w publicclassAbstractDemo publicstaticvoidmain Stringargs Circlecc newCircle 5 6 cc getArea Rectanglert newRectangle 8 6 rt getArea 75 课堂演示 定义形状 运行结果 76 学生模仿 4 77 教师示范与讲解 5 78 接口定义 接口被描述为一组方法声明和常量的集合接口只定义一组方法协议 或称标准 但没有作任何具体实现 接口的定义与类的定义相似 其一般格式为 public interface接口名 extends父辈接口列表 常量定义方法声明 79 实现接口 实现接口的定义格式如下 public abstract final class类名 extends父类名 implements接口名表 接口体内容1 接口方法实现 接口体内容2 与普通类的定义不同 接口实现必须包含 implements接口名表 部分在实现类中 一般必须重写接口中声明的所有方法 重写方法的名称 返回值 修饰符必须与接口中声明的方法一致 80 课堂演示 实现电视机遥控器 案例4 5 实现电视机遥控器 案例学习目标 进一步理解继承和多继承的含义 掌握接口声明的方法 掌握接口体定义的方法 会根据实际应用编写接口 案例知识要点 接口声明 接口体定义 使用接口 interface关键字 案例完成步骤 编写接口程序编写实现接口的程序编写测试接口的主类运行程序 81 课堂演示 实现电视机遥控器 编写接口程序interfaceIRemoteCtrl intVOLUME MIN 0 intVOLUME MAX 100 booleanpowerOnOff booleanb 电源开关intvolumeUp intincrement 声音放大intvolumeDown intdecrement 声音减小voidmute 静音 82 课堂演示 实现电视机遥控器 编写实现接口的程序 见书本 编写测试接口的主类publicclassTestTvCtrl publicstaticvoidmain String args TVRemoteCtrltv newTVRemoteCtrl 海尔H600 tv powerOnOff true tv powerOnOff false tv setChannel 45 tv channelDown tv mute tv volumeUp 2 tv volumeUp 3 83 课堂演示 实现电视机遥控器 运行结果 84 学生模仿 5 85 教师示范与讲解 6 86 定义包 在Java语言中 与客观世界中系统相对应的概念称为包 Package 包是一种分组机制 设计者可将一组高内聚 低耦合 关联性较强的模型元素 可以是类 接口 包 组织在一起 形成一个更高层次的单元包由一组类和接口组成 它是管理大型名字空间 避免名字冲突的工具 每一个类和接口的名字都包含在某个包中 使用包的作用有两个 一是划分类名空间 二是控制类之间的访问 定义包的一般格式如下 packagepackageName 87 引入包 在一个类中 如果要使用其他包中的类和接口则用import关键词来标明来自其他包中的类 Java提供import关键词来引用包 指定包的名字 包括路径名和类名 用 匹配符可以调入多个类 通常一个类只能引用与它在同一个包中的类 如果需要使用其他包中的public类 则可以使用如下的几种方法 在要使用的类前加包名用import关键字加载需要使用的类用import关键字加载整个包设置CLASSPATH环境变量 88 Java常用类库 89 数组与字符串 数组是一种常用的数据结构 相同数据类型的元素按一定顺序排列就构成了数组 数组中的各元素是有先后顺序的 它们在内存中按照这个先后顺序连续存放在一起 数组有一个成员变量length来说明数组元素的个数 创建一个空数组 intlist newint 5 用初始数值填充数组 Stringnames liujin wangym Liuzc 90 一维数组 声明一个数组其实就是要确定数组名 数组的维数和数组元素的数据类型 声明数组的语法格式有两种 数组元素类型数组名 或数组元素类型 数组名 声明数组后 要想使用数组需要为它开辟内存空间 即创建数组空间 创建数组空间的语法格式为 数组名 new数组元素类型 数组元素的个数 在声明数组时 中不允许指定数组元素的个数 如intiSno 6 将导致语法错误 正确区分 数组的第5个元素 和 数组元素5 很重要 因为数组下标从0开始 数组的第5个元素 的下标是4 而 数组元素5 的下标是5 实际是数组的第6个元素当数组初始化后就可通过数组名与下标来引用数组中的每一个元素 一维数组元素的引用格式如下 数组名 数组下标 91 二维数组 二维数组的声明与一维数组相似 只是需要给出两对方括号 格式如下 类型标识符数组名 或类型标识符 数组名 在初始化二维数组时 可以只指定数组的行数而不给出数组的列数 每一行的长度由二维数组引用时决定 但不能只指定列数而不指定行数不指定行数只指定列数是错误的 92 课堂演示 读取队列元素 案例4 6 读取队列元素 案例学习目标 了解数组的含义 掌握数组的定义方法 掌握数组的赋值方法 掌握数组元素的引用方法 在实际编程中能够合理地使用数组 案例知识要点 一维数组的定义 一维数组的赋值 一维数组元素的引用 案例完成步骤 编写程序编译并运行程序 93 课堂演示 读取队列元素 编写程序publicclassQueue publicstaticvoidmain String args inti inta newint 5 for i 0 i 0 i System out println a i a i 94 课堂演示 读取队列元素 运行结果 95 学生模仿 6 96 教师示范与讲解 7 97 String类 字符串是程序中的一个通用且重要的信息类型 在程序中经常要把各种各样的信息以字符串的形式传递 通信和输出显示 而Java为字符串操作提供了许多特殊的支持 98 StringBuffer类 StringBuffer是字符串类String的对等类 提供了大量的字符串功能 String表示定长 不可变的字符序列 而StringBuffer表示变长的和可修改的字符序列 可用于动态创建和操作动态字符串信息 StringBuffer支持字符或子字符串的插入或追加的操作 并

温馨提示

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

评论

0/150

提交评论