制作人 : 张刚
目录 类和对象 面向对象程序设计基本特征 类的声明 构造方法 成员变量和方法 封装 继承 多态 包 访问控制 final static 抽象类和接口 内部类 沈阳工业大学软件学院 Java 课程教研组 Page 2
核心知识点 类 对象 三个基本特征 类的基本结构 成员变量 构造方法 成员方法 类实例 对象创建和操作 沈阳工业大学软件学院 Java 课程教研组 Page 3
1. 1 面向对象概述 类是对现实生活中事物的描述 比如 : 小明有两只手和两只脚 会说话, 小红和小黄也有两只手和两只脚 会说话, 那么在 Java 里面会把他们的共同特点 ( 都有两个手两个脚 会说话 ) 找出来组成一个类, 即人类 对象是对现实世界理解和抽象的方法, 是计算机编程技术发展到一定阶段后的产物, 是这类事物实实在在存在的个体 比如 : 小明 小红均是对象 封装 : 把客观事物封装成抽象的类, 并且类可以把自己的数据方法只让可信的类或对象操作, 对不可信的进行信息隐藏 继承 : 可以使用现有类的所有功能, 并在无需重新编写原来类情况下对这些功能进行扩展 多态 : 允许将子类型的指针赋值给父类类型的指针 沈阳工业大学软件学院 Java 课程教研组 Page 4
1. 1 面向对象概述 现实生活中的对象 电脑中的对象 前者包含属性, 如人的身高 体重 ; 后者使用成员变量表示它们 前者包含行为, 如人的走路 跑步 ; 后者使用成员方法表示它们 难题 : 前者如何影射到后者 这需要借助类与构造方法 沈阳工业大学软件学院 Java 课程教研组 Page 5
1.2 类的基本结构 类 类的声明 类体 成员变量构造方法成员方法 哪些是类的成员,main 方法是否是类的成员 注 :main 函数可以放在类中, 但是它和构造方法都不是类成员 沈阳工业大学软件学院 Java 课程教研组 Page 6
1.2 类的基本结构 1.2.1 类的声明 类的访问权限 ([public]): public: 没有限制的访问权限, 其他的类都能访问 default: 默认访问权限, 同一个包中的类可以访问 private: 最强的访问权限, 其他的类都不能访问 抽象类 ([abstract]): 不能被实例化 [final] 不能被继承 class ClassName 基本结构 继承 [extends SuperClassName] 前面是子类, 后面是父类 比如 : 子类 extends 父类 实现接口 [implements interfacenamelist] 比如 : 子类 implements A, B 完整实例 : public abstract final class A extends B implements C, D [public][abstract final] class ClassName [extends SuperClassName] [implements interfacenamelist] 沈阳工业大学软件学院 Java 课程教研组 Page 7
1.2 类的基本结构 1.2.2 类体 成员变量 构造方法 成员方法 main 方法 描述顺序 : 成员变量 - 构造方法 - 成员方法 -main 方法 构造方法 : 用于对象构造 方法名和类名相同 成员方法 : 包含行为相关方法和属性相关方法 (get 和 set 方法 ) main 方法 : 应用程序执行的入口 是否等同于 C++ 中的 main 函数 沈阳工业大学软件学院 Java 课程教研组 Page 8
1.3 成员变量 构造方法 成员方法 1.3.1 成员变量 访问权限 ([public]): public: 任何类均可以访问 protected: 本类 子类 同一包中类可访问 default: 同一包中的类可以访问 private: 仅在本类内访问 静态变量 [static]: 与类相关, 与对象无关 可以通过对象或者类名访问 可以使用静态方法访问, 非静态不行 [final]: 一旦初始化完成, 值不能被改变 [transient]: 表示该域是对象串行化的一部分 type variablename 基本结构完整实例 : public static final int PI= 3.14; [public protected private][static][final transient] type variblename 沈阳工业大学软件学院 Java 课程教研组 Page 9
1.3 成员变量 构造方法 成员方法 Java 中变量类型 成员变量 局部变量 Ø 隶属于类, 可以不初始化 ; Ø 在所在类被实例化后, 存在堆内存中 ; Ø 作用于整个类 p 定义在方法或者域里, 必须初始化 ; p 在所在方法调用时, 存在栈内存空间内 ; p 作用于局部 方法参数 异常处理器参数 Ø 方法中要用到的值, 被称作形式参数 ; pcatch 子句中包含的参数 ; Ø 参数值由调用函数传递 比如 :max (int a, int b) p 当异常发生时由 Exception 子类的实例赋值 int v = max(2,3); int v = 1/0; 比如 : catch (Exception e) 沈阳工业大学软件学院 Java 课程教研组 Page 10
1.3 成员变量 构造方法 成员方法 Java 成员变量的初始化 变量类型 byte short int long float double char boolean 所有引用类型 ( 类 接口 数组 ) 初始值 0 0 0 0 0.0F 0.0D \u0000 false null 沈阳工业大学软件学院 Java 课程教研组 Page 11
1.3 成员变量 构造方法 成员方法 1.3.2 构造方法 构造方法的访问权限 ([public]): public: 没有限制的访问权限, 其他类都能访问 protected: 只限于子类或者同一包中类能访问 default: 只限于同一包中类能访问 private: 仅在本类中被访问 <class_name>([<argument_list>]) { 基本结构 [<statements>] 比如 :A (int a){ 如果类中仅包含被 private 修饰的构造函数, 如何实现对象的创建 注 : 利用静态成员方法 构造函数缺省存在, 如果重新定义, 缺省会被隐藏 [public protected private]<class_name>([<argument_list>]) { [<statements>] 沈阳工业大学软件学院 Java 课程教研组 Page 12
1.3 成员变量 构造方法 成员方法 Ø 构造方法的名字和类名相同 ( 字母大小写一致 ) Ø 构造方法可以有参数 Ø 构造方法没有返回值 ( 包含 void) 类体 构造方法事项 Ø 构造方法只能和 new 运算符一起使用 Ø 一个类可以定义多个构造方法, 这些方法构 成了重载关系, 但是不能无限制进行重载 Ø 创建类的对象必须显示调用构造方法 Ø 用于对类的成员进行初始化 沈阳工业大学软件学院 Java 课程教研组 Page 13
1.3 成员变量 构造方法 成员方法 1.3.3 成员方法 成员方法的访问权限 ([public]): public: 没有限制的访问权限, 其他类都能访问 protected: 只限于子类或者同一包中类能访问 default: 只限于同一包中类能访问 private: 仅在本类中被访问 静态方法 [static]: 与类相关, 与对象无关 可以通过对象或者类名访问 [final]: 表示该方法在子类中不能被重写 抽象方法 ([abstract]): 可以包含实现体, 也可以不包含实现体 包含这种方法的类部不能被实例化 同步锁 [synchronized]: 约束不同对象对共享资源的访问 throws 子句 说明方法可能抛出的异常 <return_type><name>([<argument_list>]) 基本结构比如 :int getx(){ [public>][static][final abstract][synchronized] <return_type><name>([<argument_list>]) [throws<exception_list>] 沈阳工业大学软件学院 Java 课程教研组 Page 14
1.4 类实例 对象创建和操作 1.4.1 实例 ( 雇员类 ) 雇员类 成员变量 构造方法 成员方法 姓名 编号 部门 Ø 缺省 ( 不带参数 ) Ø 带三个参数 ( 姓名 编 号 部门 ) Ø 输出成员信息 Ø 成员的 get 和 set 方法 类名 : Employee 成员变量 : 姓名 (String, name) 编号(int, id) 部门(String, department) 构造方法 : Employee( ) Employee(String name, int id, String deparment) 成员方法 : String print( ) void setname(string name) String getname( ) void setid(int id) int getid( ) void setdepartment(string department) String getdepartment( ) 沈阳工业大学软件学院 Java 课程教研组 Page 15
1.4 类实例 对象创建和操作 class Employee{ private String name; private int id; private String department; Employee( ){ Employee(String name, int id, String department){ this.name = name; this.id = id; this.department = department; void setname(string name){ this.name = name; String getname( ){ return name; void setid(int id){ this.id = id; int getid( ){ return id; void setdepartment(string deparment){ this.department = department; String getdepartment( ){ return department; String print( ){ return name + + id + + department; 沈阳工业大学软件学院 Java 课程教研组 Page 16
1.4 类实例 对象创建和操作 1.4.2 对象创建和操作 创建 操作 类 对象 任务 使用 new 运算符 使用点运算符. 实例 : 创建一个字符串对象, 并且获得其长度 String str = new String ( hello ); int len = str.length( ); 沈阳工业大学软件学院 Java 课程教研组 Page 17
1.4 类实例 对象创建和操作 1.4.3 实例 ( 雇员类操作 ) 问题描述 : 创建一个雇员对象, 该对象名字为张明 编号为 1001 部门为电子商务, 要 求使用两种方式创建对象且完成成员变量的赋值, 输出雇员信息 class Appa{ public static void main(string args[]){ Employee e = new Employee( ); e.setname( 张明 ); e.setid(1001); e.setdepartment( 电子商务 ); System.out.println(e.print( )); 使用缺省构造和 set 方法 class Appb{ public static void main(string args[]){ Employee e = new Employee( 张明, 1001, 电子商务 ); System.out.println(e.print( )); 使用带参构造方法 沈阳工业大学软件学院 Java 课程教研组 Page 18
小结 1 面向对象程序设计的三个基本特征 练习 2 3 封装 继承 (extends) 1. 创建学生类, 该类包含姓名 学号 班级属性 ; 包含两个 构造方法, 一个是缺省的, 一个是带三个参数的 ; 包含属性相关方法 ; 包含一个显 示方法 4 多态 ( 编译时多态和运行时多态 ) 2. 使用缺省构造函数创建对象 且使用属性相关方法给属性 赋值, 显示学生信息 3. 使用带参数构造函数创建对 象, 然后显示学生信息 沈阳工业大学软件学院 Java 课程教研组 Page 19