第03章面向对象特征.ppt
《第03章面向对象特征.ppt》由会员分享,可在线阅读,更多相关《第03章面向对象特征.ppt(157页珍藏版)》请在三一文库上搜索。
1、1,面向对象程序设计(Java),武汉大学国际软件学院 桂浩,2,第三章 面向对象特征,基本概念 类的定义 对象 类的继承和多态 接口和包 常用工具类,3,基本概念,什么是编程语言? 人和计算机进行交流的工具和手段 编程语言的发展 机器语言: 0101001 汇编语言: mov, push, add, call 第三代语言: 高级语言,以C语言为代表,过程式编程语言(Procedural Programming Language) 第四代语言: 非过程化/面向对象的编程语言 语言的发展: 抽象的过程,4,面向对象(Object Oriented-OO) 面向对象编程(Object Orient
2、ed Programming-OOP) 面向对象是一种软件开发的方法,“面向对象的分析与设计”(OOA&OOD研究生课程) 第一个面向对象的语言: Simula-67 第一个成功的面向对象编程语言: Smalltalk C+, JAVA, C#, PERL等 用客观世界中描述事物的方法来描述程序中要解决的问题 万事万物都是对象 程序便是成堆的对象,彼此通过消息的传递,请求其他对象进行工作,基本概念,5,五个基本概念 对象 类 封装性 继承性 多态性,基本概念,6,对象 (object) everything is an object 现实世界的对象: 桌子、书、自行车、电视、狗、文件、表格、按
3、钮、窗口 对象包含两个特性 状态: 指对象本身的信息(内部信息/内部变量) 行为: 实现对信息的访问/对象的操作 标志: 代表对象的标识符 山地车的状态(两个车轮、一些齿轮、速度、挡数),行为(刹车、加速、减速和换挡) 书包含很多信息,拥有访问所包含信息的方法,一页一页的看,通过目录找到感兴趣的内容,基本概念,7,对象 (object) 状态变量(variables) 行为方法(method) 对象就是变量和相关方法的软件集合 一个对象可以由其他对象组合而成,窗口(按钮,菜单条,文本框,状态栏等) 程序就是对象的集合,对象之间相互交互和通信完成任务 搭积木 A program is a bun
4、ch of objects telling each other what to do by sending messages,基本概念,8,类 (class) 亚里士多德: the class of fishes and the class of birds 现实世界中,存在很多同类的对象,很多桌子、书、自行车 一种原型,一种抽象,一种共性,一个模板 Every object has a type 实例(instance),某类对象的一个特定实体,类是对象的一个抽象 表格(类) 填入不同的个人信息不同的对象,基本概念,9,封装性 对象本身的数据得到保护/隐藏 其他对象仅仅需要知道对该对象的访
5、问方法(接口/interface)即可 好处 模块化-每个对象的源文件可以是相互独立的,可以被不同的程序调用,每个对象是一块积木,可以搭建不同的形状 信息隐藏-通常定义一个公共接口/方法实现对对象的访问,可以调整对象的私有信息和方法,而不会对其他调用它的对象产生影响 可重用性 黑盒子 电脑的DIY 喷墨打印机,硒鼓坏/彩色硒鼓,基本概念,10,继承性 为什么会有继承? 建立一个类后,发现另一个新的类有相同的特性,两个选择:重新定义一个新的类;在已有类的基础上,修改(加加/减减) 父类和子类,子类继承(拥有)父类所有的数据和方法,同时子类可以有新的数据和方法,“青出于蓝,而胜于蓝” 树型结构(层
6、次化结构) 根(基类),基本概念,11,继承性,运输工具,航空运输工具,陆地运输工具,水上运输工具,人力驱动,引擎驱动,二轮,四轮,客运,货运,基本概念,12,继承性 多重继承,类A,类B,类C,类D,类F,类G,一个类拥有多个父类产生二义性,例类C和类D都有一个同名的方法,类G? Java中仅仅支持单一继承,同时Java采用Interface(接口)实现多重继承而避免父类二义性,基本概念,13,多态性 表现在继承中方法的重写 子类从父类继承(extends扩展)而来 多个子类同属一个父类,所有子类有相同的父类 继承父类的方法 在不同的子类中有不同的表现形式 表现在用一个类中方法的重载,基本概
7、念,14,多态性 多态性在继承中的表现,基本概念,15,多态性,class Square extends Shape void draw() System.out.println(“Square.draw()“); void erase() System.out.println(“Square.erase()“); class Triangle extends Shape void draw() System.out.println(“Triangle.draw()“); void erase() System.out.println(“Triangle.erase()“); ,class S
8、hape void draw() void erase() class Circle extends Shape void draw() System.out.println(“Circle.draw()“); void erase() System.out.println(“Circle.erase()“); ,基本概念,16,多态性,public class Test public static Shape randShape() switch(int)(Math.random() * 3) default: case 0: return new Circle(); case 1: ret
9、urn new Square(); case 2: return new Triangle(); ,public static void main(String args) Shape s = new Shape9; for(int i = 0; i s.length; i+) si = randShape(); for(int i = 0; i s.length; i+) si.draw(); ,Circle.draw() Triangle.draw() Circle.draw() Circle.draw() Circle.draw() Square.draw() Triangle.draw
10、() Square.draw() Square.draw(),基本概念,17,第三章 面向对象特征,基本概念 类的定义 对象 类的继承和多态 接口和包 常用工具类,18,程序是对象的集合,而对象是类的实例化 源程序就是一个个的Java类 Java本身提供的类(核心API) 见Java文档中描述 程序员可以对其进行调用 j2sdk1.4.1_01jrelibrt.jar(22.4MB) 程序员自己定义的类,类的定义,19,类的定义格式 类的修饰符class 类名 extends 父类名 implements接口名 类型 成员变量1; 类型 成员变量2; 类型 成员方法1(参数1, 参数2, )
11、方法体; 类型 成员方法2(参数1, 参数2, ) 方法体; ,类的定义,20,类的定义格式 类的修饰符 class 类名 extends 父类名 implements 接口名 类的修饰符 public: 公共类,可以被其他类所使用,declares that the class can be used by any class regardless of its package (无任何限制) 无修饰/默认说明: a class can be used only by other classes in the same package (仅仅能在同一个包中的其他类引用) abstract:
12、declares that the class cannot be instantiated (宣布该类不能被实例化) final: declares that the class cannot be subclassed (宣布该类不能有子类),类的描述,21,类的修饰符 final - Declares that the class cannot be subclassed.(宣布该类不能有子类),类的描述,final class ChessAlgorithm . . . ,class BetterChessAlgorithm extends ChessAlgorithm . . . ,C
13、ant subclass final classes: class ChessAlgorithm class BetterChessAlgorithm extends ChessAlgorithm 1 error,22,类的定义格式 类的修饰符 class 类名 extends 父类名 implements 接口名 extends: 继承的关系 implements: 实现哪些接口(interface)的方法,实现多重继承 public class Test extends Frame implements ActionListener, ItemListener ,类的描述,23,一个简单的
14、类 class Student String name, stuNumber; double score1, score2, score3; void set1(String s1, String s2) name = s1; stuNumber = s2; System.out.println(name + “ “ + stuNumber); double setScore(double d1, double d2, double d3) double d; score1 = d1; score2 = d2; score3 = d3; d = d1 d2 + d3; return d; ,类
15、的描述,24,包(Package)的概念 package org.jalpha; class test 源文件位置: “D:srcorgjalphatest.java” 编译方法1: “cd D:srcorgjalpha” “javac test.java” 编译方法2: “cd D:src” “javac orgjalphatest.java” class文件位置: “D:srcorgjalphatest.class” 运行: “cd D:src” “java org.jalpha.test”,类的描述,25,包(Package)的概念 通过包来管理类名空间 防止同名类名的冲突 层次化的结构
16、,类的描述,对个体(个人和机构) 将类文件放在不同的目录下 防止重名 orgjalphamethod1*.java method2*.java,ABC 公司 Engine.java,XYZ 公司 Engine.java,需调用Engine.java?,ABC 公司 comabcEngine.java,XYZ 公司 comxyzEngine.java,26,包(Package)的概念 package org.jalpha; class test ,类的描述,D:srcorgjalphatest.java D:srcorgjalphatest1.java D:srcorgjalphatest2.j
17、ava,27,对象具有状态和行为 成员变量定义 访问权限修饰符 类型 变量名; 访问权限修饰符 类型 变量名 =初值; 访问权限修饰符 类型 变量名 =初值 ,变量名 = 初值; 成员方法定义 访问权限修饰符 方法返回类型 方法名 () throws 异常名 方法体; 类型:基本类型,复合类型(数组、类和接口),类成员-变量和方法,28,访问控制修饰符 公共访问控制符public 被所有类访问 默认访问控制符 被同一包中其他类访问 私有访问控制符 private 被该类自身访问 保护访问控制符 protected 该类自身、同一个包中的其他类、其他包中的子类访问 私有保护访问控制符privat
18、e protected 该类自身、所有子类访问,类成员变量的访问,29,非访问控制修符 静态变量static 属于类的变量 最终变量final 值在程序的执行过程中不会改变 易失变量volatile 可能同时被多个线程所控制和修改,类成员变量的访问,30,public (公共变量/公共方法) 容许全权访问,无任何限制(先构造对象,再访问),类成员的访问,class A public int x; public void print() class B void test() A a = new A(); a.x = 100; a.print(); ,package abc; class A p
19、ublic int x; public void print() package xyz; import abc.A; class B void test() A a = new A(); a.x = 100; a.print(); ,直接访问公有变量x 和公共方法print(),31,private (私有变量/私有方法) 仅能在其所定义的类中被访问(先构造对象,再访问),D:javac A.java x has private access in A a.x = 100; print() has private access in A a.print(); 2 errors,类成员的访问,
20、class A private int x; private void print() class B void test() A a = new A(); a.x = 100; a.print(); ,32,protected (保护变量/保护方法) 容许类本身、子类(有一定限制)以及同一个包中所有类访问(先构造对象,再访问),类成员的访问,class A protected int x; protected void print() class B void test() A a = new A(); a.x = 100; a.print(); ,package abc; class A
21、protected int x; protected void print() package xyz; import abc.A; class B extends A void test(A a, B b) a.x = 100; a.print(); b.x = 100; b.print(); ,/illegal /illegal /legal /legal,33,无修饰 (友好变量/友好方法) 容许类本身以及同一个包中所有类访问,类成员的访问,class A int x; void print() class B void test() A a = new A(); a.x = 100;
22、a.print(); ,package abc; class A int x; void print() package abc; class B void test() A a = new A(); a.x = 100; a.print(); ,34,小结,* 指子类与父类不在同一个包中的情况,类成员变量的访问,35,static (静态变量/静态方法) 类的变量/方法,独立于类的对象,可以直接根据类名调用 class S static int A = 12, B = 34; static void print() class Test public static void main(Str
23、ing args) System.out.println(“A=“ + S.A + “ B=“ + S.B); S.print(); ,类成员变量,36,static (静态变量/静态方法),class Test public void print(int x) System.out.println(x); public static void main(String args) int x = 3; print(x); ,D:javac Test.java Test.java:9: non-static method print(int) cannot be referenced from
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 03 面向 对象 特征
链接地址:https://www.31doc.com/p-2546795.html