Java面向对象基础.ppt_第1页
Java面向对象基础.ppt_第2页
Java面向对象基础.ppt_第3页
Java面向对象基础.ppt_第4页
Java面向对象基础.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

面向对象概述 2 目录 理解对象和类理解抽象和封装对象与类掌握包的创建和导入 3 面向对象编程 面向对象的三大特征封装 Encapsulation 继承 Inheritance 多态 Polymorphism 4 对象 对象是存在的具体实体 具有明确定义的状态和行为 5 对象的示例 收银员对象 顾客对象 顾客姓名 朱丽叶年龄 28体重 52千克操作 购买商品 状态 姓名 布兰尼职衔 收银员年龄 35体重 60千克操作 收款打印帐单 行为 6 类 类以共同特性和操作定义实体类是用于组合各个对象所共有操作和属性的一种机制 形状类 动物类 汽车类 类的示例 类是具有相同属性和行为的一组对象的集合 7 类和对象的示例 收银员 系统管理员 仓库管理员 促销员 采购经理 8 属性 事物的特性在类中表示为变量每个对象的每个属性都拥有其特有的值属性名称由类的所有实例共享 住址 姓名 属性 年龄 在类中表示对象或实体拥有的特性时称为属性 9 方法 对象执行的操作称为方法 10 方法的示例 缝衣服的步骤 量尺寸 得到工具 缝衣服 方法 缝制衣服 裁缝 11 类和对象的区别 类是概念模型 定义对象的所有特性和所需的操作 对象是真实的模型 类定义实体 对象是实际的实体 12 封装 信息隐藏 隐藏对象的实现细节 不让用户看到将东西包装在一起 然后以新的完整形式呈现出来例如 两种或多种化学药品组成一个胶囊将方法和属性一起包装到一个单元中 单元以类的形式实现 隐藏属性 方法或实现细节的过程称为封装 13 封装的示例3 1 接口 采购经理 罗杰斯先生 法拉力公司 迪斯尼汽车公司 市场经理 雪莉女士 要求 14 封装的示例3 2 有选择地提供数据 法拉力公司 迪斯尼汽车公司 15 封装的示例3 3 实体法拉力公司 实体迪斯尼汽车公司 AutiLtd ButoLtd 16 抽象 处理事物复杂性的方法 只关注事物的重要细节 而忽略事物的次要细节 17 抽象的示例 属性 方法 getName getStudentNO getSeatNumber 18 类的定义 类的定义格式如下 修饰符 class类名 extends父类名 implements接口名1 接口名2 类属性声明 类方法声明 其中以 括起的内容表示定义时可以没有 以大括号括起的内容称类体 之前部分称类头 修饰符 class类名 extends父类名 implements接口名 部分就是类头 19 1 类头说明 类头中关键词class表示类定义的开始 后面紧跟的是类名 修饰符用来说明类的特殊性质 如前面程序中的public等 private 私有 修饰的类只能被同一包名中的类访问 这是Java默认方式 public 公共 修饰的类能被所有的类访问 abstract 抽象 修饰的类不能被实例化 它包含有未实现的方法 final 最终 修饰的类不能被继承 即不能有子类 关键词extends表示该类是个子类 它的父类名紧跟在extends后 关键词iplements表示该类实现了哪些接口 后面就是接口名 20 2 类体说明 类体中定义了该类所有的成员变量和该类所支持的方法 其形式说明如下 类体 成员变量说明 构造方法说明 静态初始化说明 方法说明 类体由成员变量说明 构造方法说明 静态初始化说明和方法说明构成 它们都是可选的成员变量 修饰符 变量的数据类型变量名 初始值 类属性为简单变量时 修饰符 类名对象名 new类名 参数列表 类属性为对象时 21 成员变量说明 Java中成员变量说明形式如下 修饰符 成员变量类型成员变量名列表 成员变量的修饰符有以下几种 缺省访问修饰符 public protected private final static transient和volatile 1 缺省访问修饰符缺省访问修饰符的成员变量可以被同一包 package 中的任何类访问 2 public 公共 public修饰的成员变量可以被项目文件中的任何方法所访问 由于public成员变量不受限制 这易使类的对象引起不希望的修改 建议成员变量尽量不要使用public修饰符 3 protected 受保护 protected修饰的成员变量可以被有继承关系的类自由访问 即子类可以访问它 22 成员变量说明 4 private 私有 private修饰的成员变量只能在同一个类中使用 这种方式通常是最为安全的 5 static 静态 类变量 static修饰的成员变量又称为类变量 不加static修饰的成员变量又叫对象变量 对象变量依附于具体的对象实例 它的值因具体对象实例的不同而不同 而类变量为该类的所有对象共享 它的值不因类的对象不同而不同 6 final 最终 常量 final修饰的成员变量叫最终成员变量 一开始创建该变量时将其设定了一个值 在以后程序的运行过程当中 变量的值将一直保持这个值不变 最终变量又称为常量 23 类的属性 PublicvoidsetName Stringna name na PublicvoidgetName Stringna returnna 上面代码所对应的属性为name setName是name属性的写操作器getName是name属性的读操作器读写操作器和属性之间的关系 属性的首字母大写 在前面加上get或者set前缀Eclipse中提供了非常方便的get set功能 24 构造方法 一个新对象的初始化的最终步骤是去调用一个叫做构造函数的方法 它具有以下两个规则 方法名称必须与类名称完全相匹配 对于构造函数方法 不要声明返回类型 创建一个类的新对象时 系统会自动调用该类的构造函数方法 为该对象初始化 构造方法分为缺省的构造方法 不带参数 和带参数的构造方法缺省的构造方法如果类的定义没有编制构造方法 Java语言会自动为用户提供 这个由Java自动提供的构造方法就是所谓的缺省构造方法 缺省的构造方法确保每个Java类都至少有一个构造方法 该方法应符合类的定义 带参数的构造方法带有参数的构造方法能够实现这样的功能 当构造一个新对象时 类构造方法可以按需要将一些指定的参数传递给构造方法 publicPoint intx inty this x x this y y 25 方法 方法的形式如下 方法修饰符 返回值类型方法名 形参列表 throws异常列表 方法修饰符包括以下几种 public修饰的方法可以由其他类访问 protected修饰的方法只能由继承关系的类访问 private修饰的方法只能由说明该方法的类访问 static修饰的方法为静态方法 又叫类方法 无static修饰的方法为对象方法 类方法是该类的所有对象共享的方法 abstract修饰的方法为抽象方法 无其方法体 final修饰的方法为最终方法 不能由子类改变 synchronized 同步 修饰的方法执行之前给方法设置同步机制 实现线程同步 native修饰的方法为本地方法 即方法实现与本机系统有关 26 方法的参数传递 传值和传址传值 基本数据类型的参数传递ClassPassValue Publicstaticvoidmain String args Intx 5 Change x System out println x PublicstaticintChange intx x 3 Returnx 27 方法的参数传递 传址 引用数据类型的参数传递ClassPassRef intx publicstaticvoidmain String args PassRefobj newPassRef obj x 5 change obj System out println obj x Publicstaticvoidchange PassRefobj obj x 3 28 方法的重载Overload 方法的重载指的是在同一个类中允许同时存在一个以上的同名方法 只要它们的参数个数或者参数类型不同即可publicclassTest publicstaticvoidmain String args intisum doublefsum isum add 3 5 isum add 3 5 6 fsum add 3 2 6 5 publicstaticintadd intx inty reutrnx y publicstaticintadd intx inty intz returnx y z publicstaticdoubleadd doublex doubley returnx y 29 构造方法的重载 和一般的方法重载一样 重载的构造方法具有不同个数或不同类型的参数 编译器就可以根据这一点判断出用new关键字产生对象时 该调用哪个构造方法了 产生对象的格式是 new类名 参数列表 重载构造方法可以完成不同初始化的操作 如 p3 newPerson Tom 18 语句 会做这样几件事 创建指定类的新实例对象 在堆内存中为实例对象分配内存空间 并调用指定类的构造方法 最后将实例对象的首地址赋值给引用变量p3 30 类方法的调用 类方法直接和类联系在一起 它不能通过类的实例来调用 类方法中不能有对类的对象变量的操作 类方法调用形式如下 类名 类静态方法名 实参列表 对象方法调用形式如下 类对象名 类非静态方法名 实参列表 31 static静态变量 当我们编写一个类时 其实就是在描述其对象的属性和行为 而并没有产生实质上的对象 只有通过new关键字才会产生出对象 这时系统才会分配内存空间给对象 其方法才可以供外部调用 我们有时候希望无论是否产生了对象或无论产生了多少对象的情况下 某些特定的数据在内存空间里只有一份 例如所有的中国人都有个国家名称 每一个中国人都共享这个国家名称 不必在每一个中国人的实例对象中都单独分配一个用于代表国家名称的变量 编写使用静态变量统计一个类产生的实例对象的个数的程序 32 例子1 01 publicclassstatic demo 02 03 publicstaticinti 0 04 publicintj 0 05 publicvoidshow 06 07 System out println i 08 System out println j 09 10 11 12 classtest 13 14 publicstaticvoidmain Stringargs 15 16 static demoobj1 newstatic demo 17 obj1 i 100 18 obj1 j 200 19 obj1 show 20 static demoobj2 newstatic demo 21 obj2 show 22 23 33 01 publicclassclassNumberDemo 02 03 publicstaticintobjNum 0 04 publicclassNumberDemo 05 06 classNumberDemo objNum 07 08 publicvoidshow 09 10 System out println theNo classNumberDemo objNum 11 12 13 publicstaticvoidmain Stringargs 14 15 classNumberDemop null 16 p newclassNumberDemo 17 p show 18 p newclassNumberDemo 19 p show 20 p newclassNumberDemo 21 p show 22 23 例子2 34 静态代码块 一个类中可以使用不包含在任何方法体中的静态代码块 staticblock 当类被载入时 静态代码块被执行 且只被执行一次 静态块经常用来进行类属性的初始化 类中的静态代码块被自动执行 尽管我们产生了类的多个实例对象 但其中的静态代码块只被执行了一次 当一个程序中用到了其他的类 类是在第一次被使用的时候才被装载 而不是在程序启动时就装载程序中所有可能要用到的类 35 例子 01 publicclassstatic block 02 03 static 04 System out println helloblock 05 06 publicstaticvoidmain Stringargs 07 08 System out println hellomain 09 10 36 01 publicclassclassNumberDemo1 02 03 publicstaticintobjNum 0 04 static 05 06 以前已经创建了100个对象 07 classNumberDemo1 objNum 100 08 09 publicclassNumberDemo1 10 11 classNumberDemo1 objNum 12 13 publicvoidshow 14 15 System out println theNo classNumberDemo1 objNum 16 17 18 publicstaticvoidmain Stringargs 19 20 classNumberDemo1p null 21 p newclassNumberDemo1 22 p show 23 p newclassNumberDemo1 24 p show 25 p newclassNumberDemo1 26 p show 27 28 37 static静态方法 在静态方法里只能直接调用同类中其它的静态成员 包括变量和方法 而不能直接访问类中的非静态成员 这是因为 对于非静态的方法和变量 需要先创建类的实例对象后才可使用 而静态方法在使用前不用创建任何对象 静态方法不能以任何方式引用this和super关键字 与上面的道理一样 因为静态方法在使用前不用创建任何实例对象 当静态方法被调用时 this所引用的对象根本就没有产生 main 方法是静态的 因此JVM在执行main方法时不创建main方法所在的类的实例对象 因而在main 方法中 我们不能直接访问该类中的非静态成员 必须创建该类的一个实例对象后 才能通过这个对象去访问类中的非静态成员 这种情况 我们在以后的例子中会多次碰到 38 静态构造方法 39 对象的创建 要使用某一个类所定义的属性或方法时 必须先定义并创建这个类的一个对象 并用对象调用属性或方法 而不能直接用类去调用属性和方法 定义对象的格式如下 类名对象名 对象名 例如 CarmyCar1 myCar2 myCar3 Personp1 newPerson 执行完后的内存状态 40 创建对象称为类的实例化 它的格式如下 对象名 new类名 例如 myCar1 newCar 创建对象myCar1定义和创建对象放在同一个语句 格式如下 类名对象名 new类名 例如 CarmyCar4 newCar 定义并创建对象myCar4 41 对象的销毁 Java中对象的创建由程序来实现 而对象的删除和回收则不能通过程序来实现垃圾回收过程分析垃圾收集器是Java虚拟机中运行着的一个程序 该程序不停地检查堆Heap内存中对象的使用情况 并将无用的对象从中删除但什么时间回收 回收的过程及次序则独立于当前程序的 完全由Java系统决定 程序开发人员没法来干涉c 中的析构方法java中的finalize 方法System gc的作用CarmyCar4 newCar 定义并创建对象myCar4myCard4 null myCard4称为没有变量引用的对象 将被GC回收 42 包 包允许将类组合成较小的单元 类似文件夹 使其易于找到和使用相应的类文件有助于避免命名冲突 在使用许多类时 类和方法的名称很难决定 有时需要使用与其他类相同的名称 包基本上隐藏了类并避免了名称上的冲突包允许在更广的范围内保护类 数据和方法 可以在包内定义类 而在包外的代码不能访问该类 包将类名空间划分为更加容易管理的块 包既是命名机制也是可见度控制机制 43 创建包 packagemypackage publicclassCalculate publicdoublevolume doubleheight doublewidth doubledepth 44 导入包 importmypackage Calculate publicclassPackageDemo publicstaticvoidmain Stringargs Calculatecalc newCalculate 45 继承 在Java编程语言中 通过继承可利用已有的类 并扩展它的属性和方法 这个已有的类可以是语言本身提供的 其他程序员编写的或程序员原来编写的 继承性在Java中无所不在 如果我们在声明类A时 指明类A继承了类B 类B是一个已定义了的类 则类A通常就拥有了类B的成员变量和方法 此时 类B称为类A的超类 superclass 超类也称为基类 类A称为类B的子类 subclass 子类也称为派生类 Object类是Java中所有类的超类 也就是说Java中的类直接或间接由Object类派生而来 46 继承 继承是面向对象编程的一个主要优点之一 它对如何设计Java类有着直接的影响 继承有如下几点好处 1 它可以利用已有的类来创建自己的类 只需要指出自己的类和已有的其他的类有什么不同即可 而且还可以动态访问其他有关的类中的信息 2 通过继承 可以利用Java类库所提供的丰富而有用的类 这些类都已经被很好地实现 3 当设计很大的程序时 继承可以使程序组织得更加层次清晰 有利于程序设计和减少错误的发生 类继承语法形式类继承语法形式如下 classSubClassNameextendsSupperClassName 47 BasicCalculator 01 publicclassBasicCalculator 02 publicintadd inta intb 03 04 returna b 05 06 publicintminus inta intb 07 08 returna b 09 10 48 AdvancedCalculator 01 publicclassAdvancedCalculatorextendsBasicCalculator 02 publicintmultify inta intb 03 04 returna b 05 06 publicintdevided inta intb 07 08 returna b 09 10 49 01 publicclassTest 02 03 publicstatic

温馨提示

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

评论

0/150

提交评论