chapter03-面向对象.ppt_第1页
chapter03-面向对象.ppt_第2页
chapter03-面向对象.ppt_第3页
chapter03-面向对象.ppt_第4页
chapter03-面向对象.ppt_第5页
已阅读5页,还剩49页未读 继续免费阅读

下载本文档

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

文档简介

内容 面向过程与面向对象的区别类与对象的概念类的定义对象的创建和使用构造函数对象内存分析及引用传递this关键字static关键字类的继承方法的覆盖super关键字 final关键字抽象类接口多态抽象类与接口的区别Object类package和import初步Eclipse访问权限控制内部类单例模式初步 面向过程与面向对象的区别 面向过程装修 找水电师傅搞水电 找瓦匠铺地板 找刷漆匠刷墙面向对象装修 水电工作 瓦匠工作 漆匠工作面向对象对会将现实世界分割成不同的单元 对象 实现各个对象 如果完成某个功能 只需要将各个对象协作起来就可以 为什么要面向对象 因为现在信息系统越来越复杂 我们程序要做的事情越来越庞大 越来越复杂 面相对象的三大特征封装继承多态 类和对象的概念 对象 object 计算机语言对现实物体的描述 具有属性和方法 比如张三 李四 101班 102班 类 class 类是对具有共性事物的抽象描述 是在概念上的一个定义 通常根据名词 概念 来发现类 如在成绩管理系统中 学生 班级 课程对象和类的关系对象是类的具体和实现 类是对象的抽象 101班 102班 班级 102班 101班 103班 类的定义 java中使用class关键字定义类publicclassStudent 学号intid 姓名Stringname 性别charsex 地址Stringaddress 年龄intage 操作Student java 对象的创建和使用 new创建出来 才能用Studentzhangsan newStudent System out println id zhangsan id 操作 创建OOTest01 java类是静态的概念是要预先定义的 对象是动态创建的使用对象的引用访问对象成员变量和成员方法 引用 方式访问操作 OOTest02 java Customer java引用 访问和get set访问了解访问类的非静态方法 静态成员变量 成员变量 成员变量 全局变量 有称之为属性类型可以是基础类型 也可以是引用类型作用域是全局的默认初始化 这和局部变量不一样 对象的创建和使用 内存分析解释对象创建和使用对象没有引用指向的时候被垃圾回收器回收操作分析Customer java OOTest03 javajava值传递 引用类型和基础类型区别操作分析 OOTest04 java OOTest05 java引用类型传递是堆内存地址基础类型传递的是字面值 内存分析 构造方法 构造函数 构造器 Constructor 构造方法主要用来创建类的实例化对象 可以完成创建实例化对象的初始化工作 构造方法调用完成 对象才算创建成功 修饰符列表 构造方法名 形式参数列表 方法体 构造方法名称必须与类名一致构造方法不具有任何返回值类型 即没有返回值 关键字void也不能加入 加入后就不是构造方法了 就成了普通的方法了任何类都有构造方法 如果没有显示的定义 则系统会为该类定义一个默认的构造器 这个构造器不含任何参数 如果显示的定义了构造器 系统就不会创建默认的不含参数的构造器了 构造方法可以重载 和普通方法一致 操作 ConstructorTest01 java User java 练习理解构造方法 操作并内存分析 ConstructorPoint java this关键字 this是什么 this是一个内部引用类型 堆中每一个java对象都有一个this引用 保存的存地址执行自己本身 这叫内部引用this可以用在那 this用在构造方法中 通过一个构造方法去调用另一个构造方法 必须出现在构造方法的第一行 例如 this 1970 1 1 this 参数列表方式 调用另外一个构造方法编写ThisTest01 javathis能用在成员方法中 访问对象的其他成员方法和成员变量 编写ThisTest02 java当局部变量和成员变量重名的时候可以使用this指定调用成员变量 编写ThisTest03 javathis 成员方法 成员变量 的时候 this代表了当前对象this不能用在静态方法中 编写ThisTest04 java static关键字 static修饰的变量叫做 静态变量 static修饰的方法叫做 静态方法 static还可以定义静态语句块 static定义的静态语句块在类加载阶段执行 并且只执行一次 并且是自上而下的顺序执行 操作 StaticTest01 java static块和普通实例语句块对比 实例语句块 普通程序块 每一次调用构造方法之前会执行一次 实例语句块执行顺序也是自上而下 静态块是类加载的时候执行 回顾下java运行机制 自上而下执行 是在main方法之前操作分析 StaticTest02 java static修饰方法 static修饰的方法叫做 静态方法 静态方法不用创建对象也能直接访问该方法 和对象无关使用 类 也可以使用 引用 访问该方法 使用 引用 本质引用 所以推荐 类 操作分析 StaticTest03 java静态方法中不能访问非静态资源一般情况下工具类中的方法大部分都是静态方法 static修饰全局变量 static修饰的变量叫做 静态变量 所有某个类的实例共用一份静态变量 实际上就是方法区的一块内存 静态变量和实例引用没有关系静态变量访问和静态方法一样可以使用 类名 也可使用 引用 使用 引用 本质还是使用 类 所以推荐 类 操作分析 StaticTest04 java 关于代码顺序 publicclassStaticTest05 编译通过staticinti 100 static System out println i 非法向前引用 static System out println i staticinti 100 类的继承 为什么要继承面向对象的三大特性 封装 封装细节 继承 多态继承是面向对象的重要概念 软件中的继承和现实中的继承概念是一样的继承是实现软件可重用性的重要手段 如 A继承B A就拥有了B的所有特性 如现实世界中的儿子继承父亲的财产 儿子不用努力就有了财产 这就是重用性使用了extends以后 代码可以复用正是因为有了继承 才可以有多态 才可以有抽象java中只支持类的单继承 也就是说A只能继承B A不能同时继承Cjava中的继承使用extends关键字操作内存分析 SuperClass javaSub javaTest01 java所有类的基类都是Obect 方法的覆盖 Override 重写 回顾方法的重载条件 方法名称相同方法参数类型 个数 顺序至少有一个不同方法的返回类型可以不同 因为方法重载和返回类型没有任何关系方法的修饰符可以不同 因为方法重载和修饰符没有任何关系方法重载只出现在同一个类中为什么要方法覆盖因为子类某一方法行为和父类不一致 或者完全不同 方法覆盖 Override 什么是方法覆盖 重写 如果父类方法无法满足业务需要 子类将父类的方法进行重新写一遍 子类重写以后 引用指向的如果是子类对象的话 调用方法实际运行的是子类方法 方法覆盖的条件必须要有继承关系覆盖只能出现在子类中 如果没有继承关系 不存在覆盖 只存在重载在子类中被覆盖的方法 必须和父类中的方法完全一样 也就是方法名 返回类型 参数列表 完全一样子类方法的访问权限不能小于父类方法的访问权限子类方法不能抛出比父类方法更多的异常 但可以抛出父类方法异常的子异常父类的静态方法不能被子类覆盖父类的私有方法 private 不能覆盖覆盖是针对成员方法 而非属性编写Test01 java Test02 java Test03 java super关键字 super关键字的作用调用父类的构造方法调用父类的成员方法super只能用在非静态方法中和this一样为什么会有super关键字因为子类必须要调用父类的构造方法 先把父类构造完成 因为子类依赖于父类 没有父 也就没有子有时需要在子类中显示的调用父类的成员方法super是什么 super不是引用类型 super中存储的不是内存地址 super指向的不是父类对象 super代表的是当前子类对象中的父类型特征 操作分析 Employee java Manager java Test01 java super用在构造方法 一个构造方法第一行如果没有this 也没有显示的去调用super 系统会默认调用super super 的调用只能放在构造方法的第一行 super 调用了父类中的构造方法 但是并不会创建父类对象 操作分析 Account java DebitAccount java Test02 java final关键字 final表示不可变的意思采用final修饰的类不能被继承采用final修饰的方法不能被覆盖采用final修饰的变量不能被修改 final修饰的变量必须显示初始化构造方法不能被final修饰操作说明 Test01 java如果修饰的引用 那么这个引用只能指向一个对象 也就是说这个引用不能再次赋值 但被指向的对象是可以修改的操作说明 Test02 java 抽象类abstract和抽象方法 在java中采用abstract关键字定义的类就是抽象类 采用abstract关键字定义的方法就是抽象方法抽象的方法只需在抽象类中 提供声明 不需要实现操作分析 A java如果一个类中含有抽象方法 那么这个类必须定义成抽象类 但是抽象类可以没有抽象方法 如果这个类是抽象的 那么这个类被子类继承 抽象方法必须被重写 如果在子类中不复写该抽象方法 那么必须将此类再次声明为抽象类抽象的类是不能实例化的 就像现实世界中人其实是抽象的 张三 李四才是具体的 操作分析 A java抽象内能有部分方法实现 操作分析 A java 抽象类 抽象类不能被final修饰抽象方法不能被final修饰 因为抽象方法就是被子类实现的操作分析 C java为什么要有抽象方法和抽象类 往往父类需要定义特征行为 但是具体实现不明确 只有子类能明确 或者不同子类实现不一样 行为分化 其实就是多态 接口 接口我们可以看作是抽象类的一种特殊情况 在接口中只能定义抽象的方法和常量 在java中接口采用interface声明操作编写A java接口中的方法默认都是publicabstract的 不能更改成private或者其他权限 继续编写A java接口中的变量默认都是publicstaticfinal类型的 不能更改 所以必须显示的初始化 publicstaticfinal是可以省略的继续编写试验A java接口不能被实例化 接口中没有构造函数的概念 不能new接口编写Testnew java 接口 接口之间可以继承 但接口之间不能实现继续试验A java接口中的方法只能通过类来实现 通过implements关键字继续编写A java如果一个类实现了接口 那么接口中所有的方法必须实现继续编写A java一类可以实现多个接口继续编写A java 为什么要有接口 明确了某一类的要做的事情 解决了java的单继承问题实现了可移植性这个地方大家简单理解 后续在学习Android项目过程中大家要着重理解这几个方面 接口和抽象类区别 接口描述了方法的特征 不给出实现 一方面解决java的单继承问题 实现了强大的可接插性 接口完全没实现 抽象类提供了部分实现 抽象类是不能实例化的 抽象类的存在主要是可以把公共的代码移植到抽象类中 接口是完全抽象的接口中的常量全是publicstaticfinal接口没有构造方法 抽象类是有构造方法面向接口编程 而不要面向具体编程 面向抽象编程 而不要面向具体编程 优先选择接口 因为继承抽象类后 此类将无法再继承 所以会丧失此类的灵活性 多态 多态同一个类中方法重载也是一种多态 这是一种静态多态我们更多说多态是说动态多态动态多态条件有继承 类之间 或者实现 接口和类之间 有方法覆盖或者实现父类引用指向子类对象操作分析Animal java Cat java Dog javaTest01 java 多态 动态绑定动态绑定是指 在程序运行期间 jvm判断对象的实际类型 根据实际类型判断其相应的方法 内存分析动态多态向下转型 子类类型 父类引用可以预先使用instanceof判断语法 对象引用instanceof类类型返回值 boolean值if ainstanceofCat Catc Cat a 操作分析 Test02 java 类与类之间关系初步 了解 UML课程详解 泛化 继承 泛化关系 类和类之间的继承关系及接口与接口之间的继承关系实现类对接口的实现关联语言java关联关系 类与类之间的连接 一个类可以知道另一个类的属性和方法 在程序中使用成员变量体现聚合关系是关联关系的一种 是较强的关联关系 是整体和部分的关系 如 汽车和轮胎 它与关联关系不同 关联关系的类处在同一个层次上 而聚合关系的类处在不平等的层次上 一个代表整体 一个代表部分 在java语言中使用实例变量体现合成关系是关系的一种 比聚合关系强的关联关系 如 人和四肢 整体对象决定部分对象的生命周期 部分对象每一时刻只与一个对象发生合成关系 在java语言中使用实例变量体现依赖关系依赖关系是比关联关系弱的关系 在java语言中体现为返回值 参数 局部变量和静态方法调用 UML类图表示 泛化 实现 关联 依赖 聚合 合成 Object类 Object类是所有java类的个基类 位于java lang包下 如果在类的声明中未使用extends关键字指明其基类 则默认基类为Object类去看看API和源码吧所有类都继承了Object类的方法 编写ObjectSub java TestObjectSub java toString方法和重写 SUN在Object类中设计toString方法的目的 返回java对象的字符串表示形式 默认字符串表示操作TestToString javapublicStringtoString returngetClass getName 类名 Integer toHexString hashCode hashCode 该字符串由类名加标记 和此对象哈希码的无符号十六进制表示组成编写TestToString java toString重写 看看System out println Objecto 实际上调用的是String valueOf o 这个方法本质就是调用了o toString String类本身toString返回String本身对象不是默认形式实际中不满意的话 我们要重新这个toString方法 继续编写TestToString java finalize方法和垃圾回收器 垃圾回收器回收对象的时候调用 垃圾回收器 GarbageCollection 也叫GC 垃圾回收器主要有以下特点 当对象不再被程序使用时 垃圾回收器将会将其回收垃圾回收器是jvm管理的 程序员不能手动调用垃圾回收是在后台运行的 我们无法命令垃圾回收器马上回收资源 但是我们可以告诉他 尽快回收资源 System gc 垃圾回收器在回收某个对象的时候 首先会调用该对象的finalize方法GC主要针对堆内存编写并内存分析 TestFinalize java equals与 的用法基础类型比较 字面值相等true 不相等false比较引用类型 比较的内存地址 必须是同一地址 即同一对象 才会true编写内存分析TestEquals01 javaequals方法equals只能比较两个对象默认是比较两个对象内存地址地址publicbooleanequals Objectobj return this obj 继续编写内存分析TestEquals01 java现实中很多情况需要重写equals继续编写分析TestEquals01 java String类的比较 String类的Equals方法本身被重新查看源码编写内存分析TestEquals02 java ABC ABC 是true 比较特殊 知道就行记住我们比较字符串String一律用equals 字面上的字符序列完全一样 String对象就是一样 hashCode方法 对象内存地址经过hash算法返回一个int值你可以继续理解成内存地址的int表示编写TestHashCode java 包package 为什么要有包就是给类和接口按一定规则归类 便于管理 大家可以理解包是对类的目录管理解决类名冲突给类加包使用package关键字编写User java 运行出错分析加入了包如何运行所以我们的class文件必须放到和包一样的目录里才可以 这就是采用包来管理类 也就是采用目录来管理类 建立目录com flm运行需要加类全名 包名 类名 javacom flm UserJVM从 classPath此时是当前路径开始找 com flm User class之前的程序我们都叫裸包 包package import 引入不同包下的类使用import 同一个包下的类可以忽略操作TestPackage01 java TestPackage02 java不import出错如果不使用import 引入的类必须使用类全名 包 类名 使用import 必须在package语句下面import还可以引入某包下面的一切使用importcom 包含子包下的类 不过多讲 以后大家使用过程中自然加深理解了 常用的包 java lang 此包Java语言标准包 使用此包中的内容无需import引入java sql 提供了JDBC接口类java util 提供了常用工具类java io 提供了各种输入输出流所有类默认引入了java lang 使用Eclispe了 类多了要分包 分包以后写程序运行程序都很麻烦 必须使用更高级的编写程序工具Eclipse使用Eclipse 认真听了设置工作区建工程解释各个工作区快捷键操作 使用Eclipse建立第一个ecpliseTest工程 Eclipse使用 如何使用doc注释 这是我们的第一个eclipse建立的工程 第一个eclipse裸类 去看看工程目录文件夹吧 还能帮我们自动编译哦 运行也方便 控制台比那黑窗口要舒服吧 认识下各个工作区 Eclipse使用 在用它建个包 建个User类 自动语法错误提示很强大 自动引入包Ctr Shift O 语法错误提示好几个地方呢 很多快捷键可以用 比如Ctr D删除一行 Ctr Z撤销 Ctr S保存 Ctr C复制 Ctl X剪切 试试上下左右光标怎么走的 在试试双击单词选中功能 选中单词快捷方法 光标游到单词中间 使用Alt Shift 向上 至于快捷键 我们一边使用一边熟悉 老师会有意思口述 你们也可以问 authorxucca 权限访问 java访问级别修饰符主要包括 private default protected和public 可以限定其他类对该类 属性和方法的使用权限权限大小规律类内部 同一包里 子类 其他地方操作 编写public protected default private工程三个类测试清楚 内部类 一个类内部定义的类称之为内部类内部类主要分为实例内部类静态内部类局部内部类匿名内部类 内部类 实例内部类 实例内部类除了可以用public和default修饰以外还可以使用private和protected修 相当于实例成员变量 这和普通类不一样实例内部类会持有外部类的引用实例内部不能定义static成员 只能定义实例成员创建实例内部类的实例 外部类的实例必须已经创建操作 InnerClassTest01 java 内部类 静态内部类 静态内部类除了可以用public和default修饰以外还可以使用private和protected修 相当于实例成员变量静态内部类可以定义实例

温馨提示

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

评论

0/150

提交评论