Java笔记 第4章 类和对象_第1页
Java笔记 第4章 类和对象_第2页
Java笔记 第4章 类和对象_第3页
Java笔记 第4章 类和对象_第4页
Java笔记 第4章 类和对象_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

错误 未找到目录项 第四章 类和对象 第一节 面向对象的基本概念 基本概念 在分析阶段 根据系统功能的需要 找出必要的一些实体 例如选课系统中 学生和课程 称为对象 在编码阶段 如何来定义这些实体呢 根据客观存在的实体找 出它们的共同的属性 数据成员 和特征 功能 方法成员 形成一个类 之后再通过类去 创建对象 类与对象的关系是 类是对象的抽象 高度的概括 对象是类的实例 实体 类是 java 中的一种复合的数据类型 是属性和方法的统一体 1 面向对象编程基本特征 1 抽象 高度的概括 即由客观存在的实体到类的过程 2 封装 数据成员私有化 提供公共的访问者方法 封装的过程是类对外部隐藏细节 的过程 类外想要访问隐藏的细节 必须通过公共的访问者方法来进行 3 继承 实现代码重用 4 多态 同名方法的调用产生不同的行为结果 2 面向对象编程 OO 的基本步骤 1 OOA 面向对象的分析 2 OOD 面向对象的设计 3 OOP 面向对象的编程 4 OOT 面向对象的测试 5 OOSM 面向对象的软件维护 第二节 定义类的语法 一 完全语法形式 修饰符 class 类名 extends 父类名 implements 接口名 1 接口名 2 类的定义 说明 修饰符 访问权限的修饰符 public default final 修饰的类不能被继承 abstract 修饰抽象类 class 关键字 extends 继承的关键字 在 java 中一个类只能有一个父类 只能单继承 避免二义性 implements 类实现接口的关键字 一个类可以实现多个接口 二 缺省的简单语法定义 public class 类名 类体的定义 补充 包 类的容器 定义包的语句是 package 包名 package 语句在 java 源文件中是除了 空白和注释的第一条语句 且只能有一条 即一个类只能放在一个包中 cmd 窗口执行时 编译 Javac d 类名 java 如 javac d Test04 1 java 点表示当前的工作目录 将 java 源文件编译后生成的字节码文件保存在以包名为目录名的目录中并保存在当前的工 件目录里 带包执行 java 包名 类名如 java mypack Test04 1 导包 当使用其他包的类不包括 java lang 时 需要导包 否则类不可见 导包语法 import 包名 或者是 import 包名 类名 三 类体内容定义 1 数据成员 全局变量 定义语法 访问权限修饰符 其它修饰符 数据类型 数据成员名 说明 访问权限修饰符 定义成员时每个成员前都要加上访问权限 public protect default private 其它修饰符 final static 数据类型 任意合法的 java 基本数据类型和复合数据类型 数据成员的默认值 当定义数据成员时如果没有直接初始化 那么所有的数据成员都取默 认值 默认值规则是 基本数据类型 long 0L int short byte 0 double 0 0 char u0000 boolean false 复合数据类型 类或者接口 数据成员的默认值是 null 2 方法成员 2 1 构造方法 方法名和类名相同 没有任何返回值类型 在创建对象时通过 new 来调用 3 类的使用 创建对象 语法 类名 对象名 new 类名 参数列表 调用方法 对象名 方法名 参数列表 4 this 关键字的用法 视频面向对象 2 详见 Clock java ClockTest java 1 用在构造方法中形如 this xxx 表示当前正在被创建的对象的引用 Clock 类中定义的构造方法ClockTest 类中创建对象 c1 public Clock int hour int minute int second Clock c1 new Clock 23 23 23 this hour hour 此处的 this 即表示对 c1 的引用 this minute 30 this second 30 2 用在构造方法中的第一条语句处 形如 this 参数列表 表示对本类其他构造方法 的调用 3 用在普通的成员方法中形如 this xxx 表示对当前调用对象的引用 5 类成员访问权限 是指类成员在类外的使用情况 视频面向对象 2 同一个包中的不同类 访问权限或同一个包中的子类不同包中的不相干类 public对象可以直接访问对象可以直接访问 protected对象可以直接访问对象不可以直接访问 default对象可以直接访问对象不可以直接访问 private对象不可以直接访问对象不可以直接访问 6 static 关键字的用法 详见 Test04 1 Static java 1 修饰类数据成员 静态的数据成员 是所有对象共同维护和共享的数据成员 也 称为类属性 分配空间和初始化是在类加载时完成 2 修饰类的方法成员 该方法称为静态方法 静态方法只能访问静态成员 在静态方法 中不能出现 this 或者 super 关键字 调用时应该通过 类名 静态成员方法名 实参列表 调用 如果一个类中的方法都是静态的 那么该类称为工具类 注意 1 非静态方法可以访问静态成员 2 静态方法不能访问非静态成员 3 静态块 在类中定义形如 static 代码 静态块是在类加载时由虚拟机自动调用执行 当某些代码要在所有代码之前执行 并且只执行 一次 可以放在静态块中 例题 定义一个类 该类只能产生一个实例 对象 7 final 关键字的用法 1 定义常量 如果是局部常量 可以先定义再赋值 全局常量必须定义同时赋值 以上两种 变量一旦赋值不能再改变 2 修饰类 该类不能有子类 3 修饰方法 该方法不能被重写 8 native 关键字的用法 用来声明被调用的本地方法的原型 用 java 生成 C 的头文件 语法结构 public native void test 形参列表 在编译 javac d Ch04 3 java 之后 可以使用工具 javah 生成本地方法的 头文件 例如 javah d com test Ch04 3 9 垃圾回收机制 10 基本数据类型的包装类 java lang java 中基本数据类型 包装类 long Long int Integer short Short byte Byte double Double float Float char Character boolean Boolean 关于基本数据类型和对应的包装类 JDK1 5 新增的功能 实现自动的装箱和拆箱 1 自动拆箱 Integet ogjI new Integet 20 int sum objI 2 在上面表达式中首先自动将 objI 对象转成基本数据类型 然后再计算 2 自动装箱 Integer objI new Integer 20 objI equals 20 JDK1 5 之前写法 objI equals new Integer 20 在上面表达式中 20 是一个基本数据类型 int 类型的常量 在和调用对象进行比较的时候 首 先将 20 自动转成一个 Integer 对象 然后再比较是否相等 11 当类类型作为方法的返回值类型时 返回值是该类的对象 12 面向对象编程练习 参见 word 文档 13 当打印对象或者是对象与字符串连接的操作时自动调用 toString 方法 在 Object 类中定义了该方法 该方法实现的功能是返回调用对象的字符串描述 形如 包名 类名 地址编号 在 java 中定义类 如果没有明确其直接父类 默认的父类是 Object 类 因此 Object 类 中定义的成员方法会被该类自动继承 如果要返回自定义的信息格式 该类可以重写 toString 方法 如 public String toString return this pid this pname this age 第七章 继承 多态 第一节 继承 面向对象重要特征之一 目的是实现代码重用 1 继承的基本概念 一个类 A 如果获得另一个类 Base 的除了 构造方法和私有成员之外 的全部成员 并允许添加新成员 的过程就是继承 A 称为子类 Base 称为父类 Java 中 类的继承都是单继承 在定义类时 如果没有明确其父类 默认的父类都是 Object 类 任意类型 2 继承的语法 public class 子类名 extends 父类名 子类类体的定义 对父类的扩展 3 继承的过程 1 吸收父类成员 2 改造父类成员 方法重写实现 3 添加新成员 4 有一个企业 该企业中有 4 类员工 分别是 Technology hours hourlyPay Salesman sales percent Manager monthlyPay SalesManager sales percent monthlyPay 这些员工都有一些共同的属性 empNo ename job hiredate sal comm grade 单独的定义在一个 Emp 类中 其他类继承这个类 补充 Java 中格式化日期 java 中的日期类是 java util 包中的 Date 类 5 关于类族中构造方法的说明 1 父类中定义代参数构造 如果没有提供无参构造 编译时报错 原因是在子类的构 造方法中的第一条语句处默认调用父类的无参构造 形如 super 解决办法 1 在父类中添加无参构造方法 2 在子类的构造方法的第一条语句处调用父类的带参数的构造方法 6 super 的用法 1 回顾 this 的用法 1 this xxx 或者 this xxxx 如果在构造方法中表示是对创建的对象的引用 如果在普 通的成员方法中表示对调用对象的引用 2 this 参数列表 在本类的构造方法的第一条语句处 表示对本类其他构造方法的 调用 2 super 的用法 1 在子类的构造方法中的第一条语句处 形如 super 参数列表 表示对父类的构造 方法的调用 如果没有 this 或者是 super 参数列表 默认调用 super 2 super xxx 或者是 super xxx 表示使用父类的被子类覆盖 方法重写 同名覆盖 的成员 7 类族中构造方法的调用次序 在创建子类对象时先执行父类的构造方法 再执行本类的构造方法 例如 Base 类有一子类 A A 又有一个子类 B 在创建 B 类对象时 问构造方法的调用次序 Object Base A B 总是先调用最远父类的构造方法 例 一个类只定义一个私有的构造方法 问这个类是否可以被继承 不能 如果进行继承 将 报编译错误 例 如果一个类被 final 修饰 它是否可以被继承 不能 编译会报错 8 final 的用法 1 修饰变量是常量 2 修饰类 不能被继承 3 修饰方法不能被子类重写 9 方法重写 从操作层面 实现用户接口的统一性进而完成多态 1 概念 子类定义和父类同名的方法 方法的返回值 方法名以及参数列表完全相同 子类 方法的访问权限大于等于父类的被重写的方法的访问权限 如果有异常抛出 子类方法抛出的 异常类型要小于等于父类被重写的方法抛出的异常 方法重载 方法名相同 参数不同 例 父类有一方法 public void fun 如果子类定义 public void fun int x 是方法重载 第二节 多态 一 概念 相同的消息 同名方法的调用 被不同的对象接收 产生不同的行为结果 1 编译时多态 数据类型的隐含转换 方法重载 2 运行时多态 通过方法重写实现 首先父类中定义一个方法 该类的多个子类对父类的方 法进行重写 其次根据赋值兼容规则 即父类对象名可以使用子类对象进行初始化 然后调用 类中的被子类重写的方法就能实现多态 二 抽象类 处于类族的顶层 如果该类中声明了抽象方法 那么该抽象方法所在的类一定要 是抽象类 1 抽象类定义语法如下 public abstract class 类名 抽象类的定义 2 抽象方法的定义 访问权限修饰符 abstract 返回值类型 方法名 参数列表 抽象方法与一般方法相比没有方法体 方法后有分号 3 抽象类的使用要点 1 抽象类中可以存在抽象方法和非抽象方法 2 抽象类中可以定义构造方法 但是不能实例化 抽象类定义构造方法的目的是让子类调用 并完成从抽象类中继承的数据成员的初始化 3 抽象类应该具有子类 因此 abstract 和 final 不能同时使用 4 当非抽象的子类继承抽象类时必须全部实现父类中方法成员 三 综合练习 定义图形类 Shape 类 定义子类 Circle 类 矩形类 Rectangle 以及三角形 Transangle 类使用多态的方式求各种图形的面积和周长 第三节 接口 一 场景 1 场景一 交通工具的类族 顶层类 交通工具类 开火 子类 轮船类 飞机类 汽车类 助力车类 轮船子类 游轮 航母 开火 潜艇 飞机子类 客机 战斗机 开火 货机 汽车子类 小汽车 坦克 开火 货车 客车 助力车 自行车 军用摩托 开火 电动车 说明 抽象类声明或者定义了相关类 子类 共同的行为 2 场景二 手机充电器 万能充 每种电池在生产的时候 遵循某种 共同的充电协议 这个协议是万能充定制 由各个电池 厂商遵循这个协议 二 接口的定义 接口是一个 纯抽象类 声明了不相关类的共同行为以实现多态 接 口中只能有抽象方法和静态常量的声明或者定义 比抽象类还抽象 接口中的抽象方法实 际上就是提出了相关的标准或者协议 各个类根据需要可以实现这些协议 1 接口的语法定义 public interface 接口名 抽象方法的声明 静态常量的定义 语法说明 1 抽象方法的默认修饰符是 public abstract 可不写 2 静态常量的默认修饰符是 public static final 3 根据需要接口还可以继承多个接口 继承的关键字是 extends 例如 public interface MyInterface extends Inter1 Inter2 4 类可以实现多个接口 实现的语法是 public class 类名 implements 接口名 1 接口名 2 类的定义 5 接口比抽象类还抽象 因此不能实例化 接口具有类似类的结构 因此也是 Java 中的一种 复合数据类型 接口型的变量初始化是由实现类来完成的 抽象类变量的初始化是由非抽象 的子类来实现的 2 Java 中接口的分类 1 普通接口 有抽象方法和静态常量 2 常量群接口 只有静态常量的接口 3 标记性接口 这个接口中没有静态常量同时也没有抽象方法的声明 这种接口一般都是 系统提供 标识这个类能做什么 Java 中只有一个这样的接口序列化 Serializable 接口 3 实例 定义接口 Runner 有一个抽象方法 run 分别定义米老鼠和唐老鸭描述它们行走的姿势并测试 4 抽象类和接口的区别 1 语法定义 抽象类中可以定义抽象方法和非抽象方法以及构造方法和成员变量 接口只能定义静态常量和抽象方法 2 继承 抽象类只能是单继承的 接口可以继承自多个接口 3 抽象类定义了相关子类的共同行为 接口是定义不相关类的共同行为 5 接口的使用要点 1 如果实现接口的类不是抽象类 那么该类必须全部实现接口中的抽象方法 2 如果实现接口的类是抽象类 那么该类可以部分实现接口中的抽象方法 也可以不实现 3 如果实现接口的类的父类中定义了和接口中完全相同的非抽象方法 那么默认为该类也 已经实现了这个接口的抽象方法 第四节 包 1 定义包的语句 package 包名 子包名 导包 java lang 包下裸露的定义使用时可以不用导包 其他包中的定义使用时都需要导包 注 意 java 中不能 隔包导入 例 有一个 a 包 包中定义了类 A 和接口 B 和子包 b b 中定义了类 A B C 和 D 分析 有这样的语句 import a 问可以直接使用哪些定义 b 包中的定义是否允许直接使用 a 包中的类 A 和接口 B 不 能直接使用 b 包中的定义要是使

温馨提示

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

评论

0/150

提交评论