java第03讲-面向对象程序设计详解.ppt
《java第03讲-面向对象程序设计详解.ppt》由会员分享,可在线阅读,更多相关《java第03讲-面向对象程序设计详解.ppt(106页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、2022-8-102本章总体纲要本章总体纲要 类、域、方法和实例对象类、域、方法和实例对象 继承性继承性 多态性多态性 包包(package) 封装性封装性 关键字关键字abstract、static、final和和this 接口接口 内部类内部类 变量作用域范围和参数传递方式变量作用域范围和参数传递方式 面向对象程序设计基本思想面向对象程序设计基本思想2022-8-103面向对象程序设计整体介绍面向对象程序设计整体介绍 面向对象程序设计面向对象程序设计(OOP) 将将数据数据(属性属性)和和方法方法(行为或功能行为或功能)封装封装到类到类(classes)中中 数据数据与与方法方法常常是紧密
2、相关的常常是紧密相关的 对象对象(objects): 类的实例对象或类本身类的实例对象或类本身 三个基本特性:三个基本特性:封装性封装性、继承性继承性和和多态性多态性2022-8-104比较比较 结构化程序设计结构化程序设计 对应的典型的计算机语言对应的典型的计算机语言, 例如例如: C 面向操作面向操作(action)的的 函数函数(方法方法)是程序的基本单位是程序的基本单位 面向对象程序设计面向对象程序设计 对应的典型的计算机语言对应的典型的计算机语言, 例如例如: Java 面向面向对象对象(object)的的 类类(class)是程序的基本单位是程序的基本单位 方法方法(函数函数)被封
3、装在类中被封装在类中 数据数据也常常被封装在类中也常常被封装在类中2022-8-105类类 类类(class)本身也是一种对象本身也是一种对象 类类(class)同时也是实例对象的模板同时也是实例对象的模板 类类(class) 的基本组成:的基本组成:(成员成员)域域和和(成员成员)方法方法 每个对象:拥有内存每个对象:拥有内存存储成员域存储成员域/方法方法 静态的成员静态的成员域域/方法方法属于类属于类 其它成员其它成员域域/方法方法属于实例对象属于实例对象2022-8-106类的定义类的定义 类的定义格式如下:类的定义格式如下:类修饰词类修饰词 class 类名类名 extends 父类名
4、父类名 implements 接口名称列表接口名称列表 类体类体2022-8-107多个类组成的程序多个类组成的程序 很多很多Java程序需要多个类完成一项任务程序需要多个类完成一项任务 一个文件一般只含有一个类一个文件一般只含有一个类 每个文件的长度一般不要太长每个文件的长度一般不要太长 最长一般不要超过最长一般不要超过2000行行2022-8-108方法定义方法定义 与与C+程序不同的是程序不同的是: 每个方法都必须隶属于某个类每个方法都必须隶属于某个类 方法定义的格式方法定义的格式: 方法修饰词方法修饰词 返回类型返回类型 方法名方法名(方法的参数列表方法的参数列表) 方法体方法体 返回
5、类型返回类型: 返回数据的数据类型返回数据的数据类型 除了构造方法,一般要求返回类型除了构造方法,一般要求返回类型: 要么为要么为void ,要么为,要么为某种数据类型某种数据类型int、byte、float或或String 最多只能返回一个值最多只能返回一个值 方法名方法名: 任何一个合法的标识符任何一个合法的标识符 参数列表参数列表: 用逗号用逗号(,)分隔开分隔开2022-8-109返回控制返回控制 如果没有值返回如果没有值返回: return; / 退出该方法退出该方法 或者遇到该方法的最后一个或者遇到该方法的最后一个“”,则退出该,则退出该方法方法 如果有值返回如果有值返回: ret
6、urn 表达式表达式; / 退出该方法退出该方法 返回该表达式的值返回该表达式的值2022-8-1010构造方法构造方法 构造方法构造方法在创建新的实例对象时起作用在创建新的实例对象时起作用 构造方法构造方法通常用来初始化实例对象,例如通常用来初始化实例对象,例如: 初始初始化成员域或设置工作环境化成员域或设置工作环境 构造方法构造方法的特点的特点: 与类同名与类同名 没有返回值没有返回值 可以含有多种可以含有多种构造方法构造方法(重载重载) 但必须具有不同的参数列表但必须具有不同的参数列表2022-8-10 申博 申博官网 申博sunbet官网2022-8-1012默认的构造方法默认的构造方
7、法 如果没有显式地定义类的构造方法,则系统会为该类定如果没有显式地定义类的构造方法,则系统会为该类定义一个默认的构造方法。该构造方法不含任何参数。义一个默认的构造方法。该构造方法不含任何参数。 这个默认的构造方法首先调用其父类的不含任何参数的构造这个默认的构造方法首先调用其父类的不含任何参数的构造方法,然后初始化新生成的实例的各个成员域变量方法,然后初始化新生成的实例的各个成员域变量 默认值默认值: 基本数值类型基本数值类型: 0; boolean: false; 引用数据类型引用数据类型: null 最好自己写构造方法最好自己写构造方法 一旦在类中定义了构造方法,系统就不会再创建这个默一旦在
8、类中定义了构造方法,系统就不会再创建这个默认的不含参数的构造方法。认的不含参数的构造方法。2022-8-1013父类的构造方法父类的构造方法 每个构造方法都必须调用其父类的构造每个构造方法都必须调用其父类的构造方法方法 隐式调用隐式调用: 默认方式默认方式 (无参数的父类构造方无参数的父类构造方法法) 显式调用显式调用: super(参数列表参数列表); /可以根据需要,指定参数可以根据需要,指定参数 如果是显式调用,则必须是第一条语句如果是显式调用,则必须是第一条语句2022-8-1014实例实例/ / 编写一个程序验证编写一个程序验证:/ 父类构造方法的调用方式父类构造方法的调用方式/ /
9、2022-8-1015源程序源程序/ J_Test.java, by Jun-Hai Yongclass J_SuperClass J_SuperClass() System.out.println(Enter: J_SuperClass(); / End of constructor: J_SuperClass() / End of class: J_SuperClassclass J_SubClass extends J_SuperClass J_SubClass() System.out.println(Enter: J_SubClass(); / End of constructor:
10、 J_SubClass() / End of class: J_SubClasspublic class J_Test public static void main(String args) new J_SubClass(); / End of method: main / End of class: J_Test2022-8-1016编译、运行编译、运行 & 结果结果2022-8-1017结束结束(/析构析构)处理处理 内存内存 构造过程构造过程: 当创建新的实例对象时,分配内存,并占用内存当创建新的实例对象时,分配内存,并占用内存 垃圾回收垃圾回收(析构过程析构过程) 返回内存给系统返回
11、内存给系统 Java自动进行这种处理自动进行这种处理 当实例对象不再被使用了,那么就会被标记,作为垃圾回收的对象当实例对象不再被使用了,那么就会被标记,作为垃圾回收的对象 垃圾回收器在适当的时候回收这些内存垃圾回收器在适当的时候回收这些内存 内存泄露内存泄露: Java比比C/C+好很多,好很多,Java语言几乎没有语言几乎没有2022-8-1018finalize( ) 方法方法 Java提供方法提供方法 finalize( ) 在在java.lang.Object包中定义包中定义 所有的类都有所有的类都有 finalize( )方法方法 没有任何方法参数,也不返回任何值没有任何方法参数,也
12、不返回任何值(void) Java调用方法调用方法finalize( )的时机的时机: 当对象刚要被当对象刚要被回收之前回收之前 但不保证方法但不保证方法finalize( )一定会被调用到一定会被调用到 一定不要依赖于方法一定不要依赖于方法finalize( )来统计资源的释放情来统计资源的释放情况况2022-8-1019实例实例/ / 编写程序来验证:编写程序来验证:/ 垃圾回收机制中的垃圾回收机制中的/ finalize( )/ /2022-8-1020源程序源程序/ J_Finalize.java, by Jun-Hai Yongclass J_Book private String
13、m_name; J_Book(String name) m_name = name; / End of constructor: J_Book(String name) public void finalize() System.out.println(Book, + m_name + , is destroyed!); / End of method: finalize / End of class: J_Bookpublic class J_Finalize public static void main(String args) J_Book book1= new J_Book(Gone
14、 with Wind); new J_Book(Java How to Program); / Drop the reference new J_Book(Roman Holiday); System.gc(); / Force garbage collection & finalization / End of method: main / End of class: J_Finalize2022-8-1021编译、运行编译、运行 & 结果结果2022-8-1022本章总体纲要本章总体纲要 类、域、方法和实例对象类、域、方法和实例对象 继承性继承性 多态性多态性 包包(package) 封装
15、性封装性 关键字关键字abstract、static、final和和this 接口接口 内部类内部类 变量作用域范围和参数传递方式变量作用域范围和参数传递方式 面向对象程序设计基本思想面向对象程序设计基本思想2022-8-1023继承性继承性 继承性继承性 软件重用的一种方法软件重用的一种方法 根据已有的类创建新的类根据已有的类创建新的类 采纳了旧的类的属性采纳了旧的类的属性(域域)及其行为及其行为(方法方法) 增加了新的能力增加了新的能力 子类继承父类子类继承父类 子类增加了新的成员域或新的成员方法子类增加了新的成员域或新的成员方法 有时可以理解成有时可以理解成: (但不绝对但不绝对!) 子
16、类对象子类对象是是一种特殊的父类对象一种特殊的父类对象2022-8-1024继承性继承性的实现的实现 采用关键字采用关键字extendspublic class J_HelloApplet extends Applet / / 类类J_HelloApplet结束结束2022-8-1025关键字关键字: instanceof 运算符运算符: instanceof 例如例如:if (p instanceof Circle) 上面的条件为上面的条件为 true, 当且仅当引用当且仅当引用p所指向的所指向的对象是类对象是类Circle(或其或其子类子类)的实例对象的实例对象2022-8-1026实例实
17、例/ CompareTestimport java.awt.*;public class CompareTest public static void main(String args) Button b = new Button(Exit); boolean compare1 = b instanceof Button; boolean compare2 = b instanceof Component; System.out.println(Is b a Button? + compare1); System.out.println(Is b a Component? + compare2
18、); 2022-8-1027程序输出结果程序输出结果Is b a Button? trueIs b a Component? true2022-8-1028父类实例对象与子类实例对象之间的关系父类实例对象与子类实例对象之间的关系 子类实例对象可以认为也是其父类的实子类实例对象可以认为也是其父类的实例对象例对象 反之,则不对反之,则不对 可以配合使用这种特性与多态性可以配合使用这种特性与多态性 主要用一个父类拥有多种子类主要用一个父类拥有多种子类 通过父类的引用,调用子类的特定方法通过父类的引用,调用子类的特定方法 父类的引用指向子类的实例对象父类的引用指向子类的实例对象2022-8-1029隐
19、式及显式数据类型转换隐式及显式数据类型转换 数据类型转换数据类型转换: 隐式隐式 和和 显式显式 隐式隐式: 父类引用父类引用=子类对象的引用子类对象的引用 较高精度类型的变量较高精度类型的变量=较低精度类型的值较低精度类型的值 显式显式: 子类引用子类引用=(子类名子类名)父类对象的引用父类对象的引用 较低精度类型的变量较低精度类型的变量=(较低精度类型名较低精度类型名)较高精较高精度类型的值度类型的值2022-8-1030多重继承多重继承 在有些计算机语言中,允许一个类有多在有些计算机语言中,允许一个类有多个直接父类。这种继承关系称为个直接父类。这种继承关系称为多重继多重继承承 Java不
20、支持不支持多重继承多重继承 Java 允许一个类有多个直接父接口允许一个类有多个直接父接口(interface) 2022-8-1031本章总体纲要本章总体纲要 类、域、方法和实例对象类、域、方法和实例对象 继承性继承性 多态性多态性 包包(package) 封装性封装性 关键字关键字abstract、static、final和和this 接口接口 内部类内部类 变量作用域范围和参数传递方式变量作用域范围和参数传递方式 面向对象程序设计基本思想面向对象程序设计基本思想2022-8-1032多态性多态性 优点优点: 代码重用代码重用 简化设计、简化代码简化设计、简化代码 便于程序扩展便于程序扩展
21、2022-8-1033多态性的种类多态性的种类静态的多态性静态的多态性重载重载动态的多态性动态的多态性覆盖覆盖2022-8-1034静态的多态性静态的多态性(重载重载) 在编译时就能够被识别在编译时就能够被识别 针对的是同一个类内的同名方法针对的是同一个类内的同名方法 例如例如: public int square(int x) return x * x; public double square(double x) return x * x;2022-8-1035识别重载方法识别重载方法 识别标志识别标志: 参数的个数、类型、数据类型的排列顺序参数的个数、类型、数据类型的排列顺序 返回值不能
22、做为识别的标志返回值不能做为识别的标志2022-8-1036动态多态性动态多态性(覆盖覆盖) 在程序运行时才被识别在程序运行时才被识别 重写父类的方法重写父类的方法 要求相同的声明要求相同的声明 例如例如:public class J_HelloApplet extends JApplet public void paint(Graphics g) g.clearRect(0, 0, getWidth( ), getHeight( ); / 清除背景清除背景 g.drawString(小应用程序,您好小应用程序,您好!, 10, 20); / 方法方法paint结束结束 / 类类J_Hello
23、Applet结束结束2022-8-1037源程序源程序: J_Teacher.Java/ 文件名文件名: J_Teacher.java; 开发者开发者: 雍俊海雍俊海class J_Employee public int m_workYear; / 工作的年限工作的年限 public J_Employee( ) m_workYear = 1; / J_Employee构造方法结束构造方法结束 public void mb_printInfo( ) System.out.println(该职工的工作年限为该职工的工作年限为 + m_workYear); / 方法方法mb_printInfo结束结
24、束 / 类类J_Employee结束结束2022-8-1038public class J_Teacher extends J_Employee public int m_classHour; / 授课的课时授课的课时 public J_Teacher( ) m_classHour = 96; / J_Teacher构造方法结束构造方法结束 public void mb_printInfo( ) System.out.println(该教师的工作年限为该教师的工作年限为 + m_workYear); System.out.println(该教师授课的课时为该教师授课的课时为 + m_class
25、Hour); / 方法方法mb_printInfo结束结束 public static void main(String args ) J_Employee a = new J_Employee( ); a.mb_printInfo( ); a = new J_Teacher( ); a.mb_printInfo( ); / 方法方法main结束结束 / 类类J_Teacher结束结束源程序源程序: J_Teacher.Java2022-8-1039编译、运行编译、运行 & 结果结果2022-8-1040本章总体纲要本章总体纲要 类、域、方法和实例对象类、域、方法和实例对象 继承性继承性 多态
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 03 面向 对象 程序设计 详解
限制150内