大学教程从零开始面向对象编程基础.ppt_第1页
大学教程从零开始面向对象编程基础.ppt_第2页
大学教程从零开始面向对象编程基础.ppt_第3页
大学教程从零开始面向对象编程基础.ppt_第4页
大学教程从零开始面向对象编程基础.ppt_第5页
已阅读5页,还剩93页未读 继续免费阅读

下载本文档

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

文档简介

第3章面向对象编程基础 本部分重点JAVA语言的类对象继承多态接口JAVA小应用程序基础 3 1面向对象的基本概念 3 1面向对象的基本概念 1抽象 世界是由什么组成的 2对象 对象的特征 属性 属性 对象具有的各种特征每个对象的每个属性都拥有特定值例如 王小红和朱小雨的体重不一样 60kg 王小红 属性 35岁 对象的特征 方法 方法 对象执行的操作 打单 收银 方法 刷卡 3类 从对象抽取出类 顾客类轿车类 类是模子 确定对象将会拥有的特征 属性 和行为 方法 类是对象的类型不同于int类型 具有方法 各种口味的球状冰淇淋 球状冰淇淋模子 类和对象有什么区别呢 类是抽象的概念 仅仅是模板 比如说 人 对象是一个你能够看得到 摸得着的具体实体 比如 小布什 小布什 普京 克林顿 4消息 对象之间的交互通过相互发送消息实现 10 5继承 生活中 继承的例子随处可见 动物 食草动物 食肉动物 谁是父类 谁是子类 能说出继承的特点吗 继承需要符合的关系 is a 父类更通用 子类更具体 11 12 子类具有父类的一般特性 包括属性和行为 以及自身特殊的特性 巴士是汽车吗 卡车是汽车吗 出租车是汽车吗 汽车 13 为什么要使用继承 使用继承 可以有效实现代码复用 14 6多态 简单来说 多态是具有表现多种形态的能力的特征同一个实现接口 使用不同的实例而执行不同操作 彩色打印机 打印机 黑白打印机 打印效果 彩色 打印效果 黑白 打印 打印 7封装 对象同时具有属性和方法两项特性对象的属性和方法通常被封装在一起 共同体现事物的特性 二者相辅相承 不能分割 谁看见过只有 完好的零件和颜色 而不能开动的汽车 3 2Java的类和对象 所有Java程序都以类class为组织单元 1 类 Java类模板 类将现实世界中的概念模拟到计算机程序中 publicclass类名 定义属性部分属性1的类型属性1 属性2的类型属性2 属性n的类型属性n 定义方法部分方法1 方法2 方法m 定义类 定义一个类的步骤1 定义类名2 编写类的属性3 编写类的方法 常见错误 publicclass Book StringbookName StringauthorName intpageNum booleanisAvailable 类命名规则 1 不能使用Java关键字2 首字母可以为字母 也可以是 或 建议不要这样 3 不能包含空格或 号 代码错误 2 成员变量 注意 类体内的变量为成员变量 方法内的变量为局部变量 局部变量只在所在的方法中有效 数据类型总结 intdoublechar String使用class定义的类型StudentTeacherSchool 基本数据类型 引用数据类型 数据类型使用区别 变量作用域 变量声明的位置决定变量作用域变量作用域确定可在程序中按变量名访问该变量的区域 for inti 0 a 0 i 4 i a System out println a a的作用域仅在for循环中 代码错误 变量作用域 变量1类型变量1 变量2类型变量2 变量3类型变量3 public返回类型方法1 变量4类型变量4 public返回类型方法2 变量5类型变量5 publicclassAutoLion AutoLion类的方法别的类的方法 谁能使用这些变量 方法1 方法2 成员变量 局部变量 局部变量 3 方法 类的方法 电动玩具狮子属性 颜色 黄色行为 跑叫 按此按钮 狮子开始跑 如何定义类的方法 类的方法定义类的某种行为 或功能 方法的名称 方法的主体 方法返回的数据类型 定义类的方法 public返回值类型方法名 这里编写方法的主体 步骤一 定义方法名以及返回值 步骤二 编写方法体 方法的命名 如何给方法起名字 必须以字母 或 开头可以包括数字 但不能以它开头遵循的命名规范通常方法名是一个动词 如果有两个以上单词组成 第一个单词的首字母小写 其后单词首字母大写 方法的返回值 两种情况如果方法具有返回值 方法中必须使用关键字return返回该值 返回类型为该返回值的类型如果方法没有返回值 返回类型为void publicclassStudent Stringname 张三 publicvoidgetName returnname 返回类型要匹配 return表达式 编译错误 常见错误 publicclassSchool publicstaticvoidmain String args return 北京大学 返回类型是void方法中不能有返回值 常见错误 publicclassStudent publicdoublegetInfo doubleweight 95 5 doubleheight 1 69 returnweight height 方法至多可以返回一个值 不能返回多个值 方法调用 方法是个 黑匣子 完成某个特定的应用程序功能 并返回结果方法调用 执行方法中包含的语句 对象名 方法名 方法调用小结 方法之间允许相互调用 不需要知道方法的具体实现 提高了效率 35 this关键字 如果某方法中的参数名或局部变量的名与类的成员变量的名相同 则成员变量在这个方法内暂时被隐藏 成员变量在方法内被隐藏 又在方法中要引用成员变量 必须使用this关键字 用于任何实例方法内 指向当前对象this的值指向对其调用当前方法的对象this关键字可在需要当前类类型的对象引用时使用 this关键字的示例 classPixel intx inty voidinit intx inty this x x this y y publicstaticvoidmain Stringargs Pixelp newPixel p init 4 3 37 生活中的方法重载 类 方法 方法参数 方法实现 司机 轿车 巴士 火车 驾驶 启动 行驶 等待乘客上车 启动 行驶 到站停车 正点发车 行驶 到站停车 如果用代码实现 我们需要三个方法 这些方法的方法名称相同 参数类型不同 38 方法重载必须满足的条件 重载方法必须满足以下条件 方法名相同 方法的参数类型 个数 顺序至少有一项不相同 方法的返回类型可以不相同 方法的修饰符可以不相同 调用重载方法时 Java使用参数的类型和数量决定实际调用重载方法的哪个版本 39 方法重载的代码示例 方法重载并不陌生java io PrintStream类的println方法能够打印数据并换行 根据数据类型的不同 有多种实现方式 publicclassTest publicstaticvoidmain String args inti 0 charc z Stringstr hello System out println i System out println c System out println str PrintStream println int println char println String 方法名相同 参数类型不同 调用不同的println方法 方法重载 40 4构造方法 构造方法负责对象成员的初始化工作 为实例变量赋予合适的初始值构造方法必须满足以下语法规则 1 方法名与类名相同2 没有返回类型 publicclassTeacher5 privateStringname 教员姓名 构造方法publicTeacher5 name 无名氏 PublicTeacher5Test publicstaticvoidmain String args Teacher5teacher newTeacher5 使用new关键字调用构造方法 41 带参数的构造方法 通过带参数的构造方法 显式地为实例变量赋予初始值 publicclassTeacher6 privateStringname 教员姓名privateintage 年龄privateStringeducation 学历privateStringposition 职位 带参数的构造方法PublicTeacher6 StringpName intpAge StringpEducation StringpPosition name pName age pAge 可以增加对age等属性的存取限制条件education pEducation position pPosition publicStringintroduction return 大家好 我是 name 我今年 age 岁 学历 education 目前职位是 position 42 带参数的构造方法 通过调用带参数的构造方法 简化对象初始化的代码 publicclassTeacher6Test publicstaticvoidmain String args Teacher6teacher newTeacher6 李芳 23 本科 咨询师 System out println teacher introduction 创建对象时 一并完成了对象成员的初始化工作 大家好 我是李芳 我今年23岁 学历本科 目前职位是咨询师 3 2 6继承 继承是面向对象语言的重要机制 借助继承可以扩展原有的代码 应用到其他程序中 不必重新编写这些代码 在Java中 继承是通过扩展原有的类 声明新类来实现的 扩展声明的新类称为子类 原有的类称为超类 父类 Java语言不支持多重继承 限定一个类只能有一个超类 extends class子类名extends父类名 类体 classEextendsD 如果不指定超类 则该类的超类是系统声明的类Java lang Object 子类自然的继承其父类中不是private的成员变量作为自己的成员变量 并且自然的继承父类中不是private的方法作为自己的方法 类的继承原则如下 子类继承父类的成员变量 包括实例成员变量和类成员变量 子类继承父类除构造方法以外的成员方法 包括实例成员方法和类成员方法 重写 子类不满意父类的方法时 在子类中可以根据需要对从父类继承来的方法进行重写 重写方法必须和被重写方法具有相同的方法名称 参数列表和返回类型 重写方法不能使用比被重写方法更严格的访问权限 TestOverWrite java与重载 overload 的区别 重载是函数名同 参数不同 重写 子类Dau中声明了方法dance 跟父类 超类 中的方法的名字 个数 类型完全相同 超类的方法在子类中被隐藏 子类对象调用dance 时 自然调用子类的dance 方法 超类方法在子类中隐藏称为重写或置换 子类对成员变量的隐藏和方法的重写可以把超类的状态和行为改变为自身的状态和行为 例如下面的这段程序就是这样的情况 classSuperClass 父类inty voidsetY y 0 classSubClassextendsSuperClass inty 父类变量y被隐藏voidsetY 重写父类的方法setY y 1 classParent publicvoidfunction System out println IaminParent classChildextendsParent privatevoidfunction System out println IaminChild publicclassRTpolyTest publicstaticvoidmain Stringargs Parentpl newParent Parentp2 newChild p1 function p2 function 方法重写的例子 1 多态性 动态联编 动态绑定 编译时暂不绑定调用哪个方法 而是在执行期间判断所引用对象的实际类型 根据其实际的类型调用其相应的方法 new出对象来之后才能确定到底调用哪一个方法 2 多层继承 多层继承继承声明的新类 又可以被其他类再继承 从而构成多层继承 3 多层继承中构造方法的调用顺序 构造方法的调用顺序与类的继承顺序一致 从最高层次的超类开始 按继承顺序调用各类的构造方法 如果子类的构造方法要调用超类的构造方法 给从超类继承的成员变量初始化 用super 关键字super用来引用基类的成分 this 指向对象本身 super 指向当前对象的父对象 继承中的构造方法 子类的构造过程必须调用其基类的构造方法 先构造父类对象 再把剩下的东西造出来使用super 参数列表 调用基类的构造方法 使用this 参数列表 调用本类的另外的构造方法 如果调用了super 必须写在子类构造方法的第一行 如果子类的构造方法中没有显式地调用基类构造方法 则系统默认调用基类无参数的构造方法 如果子类构造方法中既没有显式地调用基类构造方法 而基类中又没有无参的构造方法 则编译出错 3 2 7java面向对象的其他机制 final类 final方法 final变量final的类不能够被继承 finalclassD classMextendsD错误final的方法不能够被重写 final修饰变量 声明该变量的值不能被改变 相当于常量 final的成员变量final的局部变量 形参 finalintvariableName 10 finalinta a 1 a 2错误习惯常量名用大写 abstract 用abstract关键字来修饰一个类时 这个类叫做抽象类 用abstract关键字来修饰一个方法时 这个方法叫做抽象方法 含有抽象方法的类必须被声明为抽象类 抽象类必须被继承 抽象方法必须被重写 子类去实现 抽象类不能被实例化 抽象方法只需声明 不需实现 super 子类隐藏了超类的成员变量或者覆盖了超类方法后 利用super 子类可以引用超类的成员变量或被覆盖的方法使用3种情况 使用super调用超类的构造方法使用super调用超类被子类覆盖的方法使用super访问超类被子类隐藏的成员变量 this 关键字this用来指自己 this有多种作用 例如 将对象自己作为参数 调用别的方法 当方法的局部变量隐藏成员变量时 利用this引用成员变量 在构造函数内调用另一构造函数 classPoint intx y Point x 10 y 20 Point intx inty this x x this y y Pointp1 p2 classB intb c B this 2 3 B intx inty b x c y 类之间的is a和has a关系 如果类A是扩展类B 则子类A和超类B之间是is a关系 类B的所有成员类A也有 如果类A的某个成员变量的类型是B 则类A和类B之间是has a关系 类A包含类B 内部类 Java也允许在类声明内部嵌套类声明 嵌套的类可以是静态的或者是非静态的 静态类不能直接引用其他包含类的成员 必须实例化 非静态的嵌套类 因为需要进行事件处理 非常流行 3 3接口 Java程序中类只能继承一个类 这种继承称为单继承 Java虽然不允许一个类继承多个类 但允许一个类实现多个接口 接口有与类相似的基本形式 接口有常量的定义和方法定义 但没有方法的实现代码 类除了能继承一个类外 可以实现多个接口 1 接口的定义 public interface接口名 extends超接口表 接口体 接口名通常以able或ible结尾 接口是一种只能由常量定义和抽象方法组成的特殊类 用public修饰的接口是公共接口 可以被所有的类和接口使用 没有的只能被同一个包中的其他类和接口使用 2 接口体接口体中的内容是一系列常量定义和方法定义 其中方法定义是一种方法声明 不提供方法的实现 用 结尾interfaceSleepable finalintMAX 100 voidsleepSometime intdaltaT floatwork floatx floaty 接口的所有变量都默认是finalstatic属性 所有的方法都默认为publicabstract属性 一个类可以用implements声明自己使用一个或多个接口 实现多个接口时 接口名用逗号隔开 classpigextendsAnimalimplementsEatable Sleepable 如果一个类要实现一个接口 那必须实现该接口的所有方法 为这些方法提供实现的方法体 实现必须完全一致 并用public修饰 3 4基本类 基本类型值与基本类对象能相互转换 可以利用以下形式的基本类构造方法 由基本类型值得到对应基本类对象 public基本类 基本类型v 例如Integern newInteger 123 也可以由基本类对象到基本类型值 设有一个Double类对象dobj doubled dobj doubleValue booleanb bobj booleanValue 3 5Java小应用程序 每个小程序都继承java applet Applet如果小应用程序已经用importjava applet Applet导入系统Applet类 小应用程序的主类publicclass主类名extendsApplet如果未用import导入系统Applet 则主类声明 public类名extendsjava applet Applet小应用程序不能调用本地的应用程序和动态时的动态数据库等 1 小应用程序的建立和运行 一个小应用程序从建立到运行4步骤 1 用Java语言编写小程序的源程序 2 把小应用程序的源程序编译成字节码 class文件 3 将应用程序的字节码文件嵌入web页中 设计一个指定小应用程序的html文件 html 4 在支持Java的浏览器上运行 2 Applet类的基本方法1 init 初始化 由浏览器载入内存时调用init 该方法只运行一次2 start 初始化后 紧接着调用start 方法 启动小应用程序主线程 或当用户从小应用程序所在的web页面转到其他页面 然后又返回时 start 方法再次被调用 3 stop 当浏览器离开小应用程序所在的页面转到其他页面 调用stop 方法 挂起小应用程序的执行 4 destroy 当关闭浏览器时 调用destroy 方法 结束小应用程序的生命 关闭线程释放对象资源 5 paint Graphicsg 方法该方法用于在屏幕上显示某些信息 如文字 色彩 背景图像等 6 repaint 方法为在java页面上显示动态效果 需要repaint方法 先清除paint方法以前所画的内容 然后再调用paint 方法 7 update 方法调用repaint 方法时 系统会自动调用update方法 importjava awt importjava applet publicclasse324extendsApplet Stringfilename sleeptime publicvoidinit sleeptime getParameter sleeptime filename getParameter filename publicvoidpaint Graphicsg g drawString sleeptime 50 60 g drawString filename 80 80 classComplex doublea b a为实部 b为虚部a biComplex Complex inta intb this a a this b b publicStringprint 输出复数 返回复数的字符串表示形式 Stringresult newString this a b 0 b 0 this b i returnresult publicdoublegetA 取复数实部 返回复数的实部 returna publicdoublegetB 取复数的虚部 返回复数的虚部 returnb 3 6子类在什么情况下能隐藏超类的成员变量和方法 解 子类重载父类的成员变量 方法时候 3 7在子类中是否允许有一个方法和超类的方法名字相同 而类型不同 解 方法重写是指 子类中定义一个方法 并且这个方法的名字 返回类型 参数个数 和类型与从父类继承的方法完全相同 publicComplexadd Complexval 复数加法 返回当前复数对象与参数指定的复数对象的和 Complexresult newComplex result a this a val a result b this b val b returnresult publicComplexsubtract Complexval 复数减法 返回当前复数对象与参数指定的复数对象的差 当前对象减去参数对象 Complexresult newComplex result a this a val a result b this b val b returnresult publicComplexmultiply Complexval 复数乘法 返回当前复数对象与参数指定的复数对象的积 Complexresult newComplex result a this a val a this b val b result b this a val b this b val a returnresult

温馨提示

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

评论

0/150

提交评论