Upload
alden-hinton
View
93
Download
4
Embed Size (px)
DESCRIPTION
沈傲东 东南大学影像科学与技术实验室. JAVA 面向对象程序设计. 对象和类. 类与对象的 JAVA 基础 JAVA 面向对象特性 重载 【Overload】 覆盖 【Override】 继承 / 扩展 【Inherit/Extend】 UML 表示. 类和对象. 实物. 分类. 能吃的. 吃好的. 能坐的. 坐好的. 对象 --- 类. 最好用的. 能穿的. 最好用不完的. 穿好的. 类是具有 共同属性和行为 的对象的 抽象 。 类可以定义为 数据和方法 的集合。 类也称为模板,因为它们提供了对象的基本框架。. - PowerPoint PPT Presentation
Citation preview
SEU-LIST
JAVA 面向对象程序设计
• 沈傲东• 东南大学影像科学与技术实验室
SEU-LIST
对象和类
• 类与对象的 JAVA 基础• JAVA 面向对象特性
重载【 Overload 】 覆盖【 Override 】 继承 / 扩展【 Inherit/Extend 】
• UML 表示
2
SEU-LIST
类和对象
3
能吃的
能坐的
能穿的 最好用的
实物
分类
对象 --- 类
吃好的
坐好的
穿好的 最好用不完的
SEU-LIST4
• 类是具有共同属性和行为的对象的抽象。
• 类可以定义为数据和方法的集合。
• 类也称为模板,因为它们提供了对象的基本框架。
类
对象
抽象
实例化
属性或状态
操作或行为
数据或变量
方法
封装的实体 = 数据 + 方法
SEU-LIST
创建类
class name { type variable1; … type variableN; type methodname1(parameter-list){ // 方法体 } … type methodnameN(parameter-list){ // 方法体 }
}
5
在类中,属性是通过成员变量体现的,而操作是用成员
函数(又称为方法)实现的。
Java 中定义类的通用格式:
成员变量(对象属性)
成员方法(对象行为
或操作)
SEU-LIST
定义方法
• 定义方法的一般格式:
[access] type methodname1([parameter-list]){ // 方法体}
6
发往某个对象的消息对应于一个方法调用。作为对消息的响应,对象将执行一个类似于过程体的方法。方法是
包含在类中的函数。
方法名称返回类型修饰符,可选
参数列表,可选
• 举例:public void setBirthday(int day, int month, int year){
day=23; month=7; year=2003;}
SEU-LIST
JAVA 类设计
• 形式 主类(含有 main 函数的类) 非主类
• 构成 访问权限、类名、类体 允许内部类、匿名类
• 与字节码文件(一一对应)• 与源文件的关系
( *.java ) 源文件可以包含多个类 源文件中至多有一个 public
类 源文件名要与 public 类名相
同7
• 一个源文件中尽量只定义一个类
• 所有类都应处于包中
DEMO
SEU-LIST
构造函数• 构造函数名称与类名称相同• 构造函数没有返回类型• 其任务是在创建对象时初始化其内部状态
8
class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) { seedLess = seed; seasonal = season; price = p; } }
SEU-LIST
this 引用
9
public class PassTest { int x; PassTest(int x) { this.x=x; } public void passingValue(){ System.out.println(“x 等于 " +x); } public static void main(String args[]) { PassTest test = new PassTest(10); test.passingValue(); }}
关键字 this 与对象关联
它用于指示当前对象
指明此对象的变量 x 应赋值为通过构造函数传
递的自变量 x 的值。
SEU-LIST
访问修饰符
10
• public 声明的数据成员和成员函数可从类外部的任何地方访问。
• 而 private 数据将被隐藏,在类外不可见,这就实现了数据封装的思想。
• 要从类外操纵 private 成员,只能通过类的public 或 protected成员来实现。
SEU-LIST
类的修饰符
• 内部类与外部类class Outer{
class Inner{}
}
• 修饰内部类 protected private static
11
SEU-LIST
对象作为参数
class Test{ int a,b; Test(int i,int j) { a=i; b=j; } // 可以在函数中改变对象状态 void change(Test obj)
{ obj.a=50; obj.b=40; }
}
12
当对象作为函数参数时,在函数中只能改变该对象的状态,但不能
改变该对象的引用
void swapobj(Day x,Day y){ Day temp=y; y=x; x=temp;}
引用本身按值传递
Day
2002,5,30
Day
2003,7,23
obj1
obj2
x
y
调用swapobj(obj1,obj2)
改变对象状态
x
y
SEU-LIST
对象和类
类与对象的 JAVA 基础JAVA 面向对象特性
重载覆盖继承
UML 表示
13
SEU-LIST
面向对象特性
14
Encapsulation融合数据和代码
Polymorphism高度抽象到一般抽象同一行为的不同表现
Inheritance构建类系,实现抽象
封装
继承
多态
聚合Aggregation功能复用,部分组合
“ 是一个” is a
“ 有一个” Has a
SEU-LIST
继承
• 被继承的类称为超类• 继承父类的类称为子类• 执行继承时,子类将获得父类的属性,并具有自
身特有的属性。
继承是面向对象编程技术的一块基石,它允许创建分等级层次的类。运用继承,可以创建一个通用类定义一系列一般特性。该类可以被更具体的类继承
Emoloyee 类: name sex
Worker 类: category dressAllowance
Officer 类: empClass vehicle
职员类,具有姓名和性别两个属性
工人类,继承了父类的姓名和性别属性外还包含类别和
是否有服装津贴属性
主任类,还包含级别和是否配备
交通工具属性
SEU-LIST
extends 关键字
• extends 关键字用于继承类。• 声明一个继承父类的类的通常形式如下: class SubclassName extends SuperclassName { // 类体 }
没有 extends ,默认父类为 Object 只能有一个父类,即单继承 子类继承父类的全部成员
注意
SEU-LIST
super 关键字• super 关键字用来解决如何直接访问或初始化
从父类继承来的属性。
• super 有两种通用形式:调用父类的构造函数、用来访问被子类的成员覆盖的父类成员。
• 它用在对象的构造函数中,将构造细节通过继承链往上传递。
• super() 必须是在子类构造函数中的第一个执行语句。
SEU-LIST
继承示例class Employee { String name; // 姓名 char sex; // 性别 Employee(String n, char s){ name = n; sex = s; } public String getName() { return name; } public char getSex(){ return sex;}}
class Worker extends Employee { char category;// 类别 boolean dressAllowance; // 是否提供服装津贴 Worker(String n,char s,char c,boolean d){ super(n,s); category = c; dressAllowance = d; } public char getCategory(){return category;} public boolean getAll(){ return dressAllowance; }}
class InheDemo { public static void main(String args[]) { Worker w = new Worker("M.John",'M','B',true); System.out.println(" 工人信息 "); System.out.println(" 姓名 : "+w.getName()); System.out.println(" 性别 : "+w.getSex()); System.out.println(" 类别 : "+w.getCategory()); if(w.getAll()) System.out.println(" 提供服装津贴 "); else System.out.println(“未提供服装津贴” ); }}
SEU-LIST
方法覆盖( override )
• 方法覆盖是 Java 实现多态性机制的另一种方式。• 在类层次结构中,如果子类中的一个方法与父类
中的方法有相同的方法名并具有相同数量和类型的参数列表,这种情况称为方法覆盖。
• 当一个覆盖方法通过父类引用被调用, Java根据当前被引用对象的类型来决定执行哪个版本的方法。
• 可以通过 super 关键字调用直属父类中被覆盖的方法版本。
SEU-LIST
方法覆盖示例
class SuperClass { int a; SuperClass(){ a = 10; } public void printA(){System.out.println(" 父类中 a ="+a);}}class SubClass extends SuperClass { int a; SubClass(int a){ this.a = a; } public void printA(){ System.out.println(" 子 类 中 a =
"+a); }} public class OverrideDemo { public static void main(String args[]) { SuperClass s1 = new SubClass(10); s1.printA(); }} 将调用子类的 printA 方
法
SEU-LIST
方法重载( overloading )
• 方法重载是 Java 实现面向对象的多态性机制的一种方式。
• 同一个类中多个方法有相同的名字,不同的参数列表,这种情况称为方法重载。
• 返回类型不同并不足以构成方法重载。• 当重载方法被调用时,编译器根据参数的类型和
数量来确定实际调用哪个重载方法的版本。
SEU-LIST
方法重载示例
class Calculation { public void add( int a, int b) { int c = a + b; System.out.println(" 两个整数相加得 "+ c); } public void add( float a, float b){ float c = a + b; System.out.println(" 两个浮点数相加得 "+c); } public void add( String a, String b) { String c = a + b; System.out.println(" 两个字符串相加得 "+ c); }}
class CalculationDemo { public static void
main(String args[]) {Calculation c = new Calculation();c.add(10,20);c.add(40.0F, 35.65F);
c.add("早上 ", "好 "); }} 编译器决定
调用版本
SEU-LIST
重载构造函数
• Java 为每一个类自动提供缺省构造函数• 缺省构造函数将成员变量的值初始化为 缺省值• 一旦创建了自己的构造函数,缺省的构造函数
将不复存在。• 重载构造函数提供了一组创建对象的方式,可
以根据需要决定是否带初始参数。
public class constructOverload { int x; constructOverload() { x=0; System.out.println(" 不带参数的构造函数 "); } constructOverload(int x){ this.x=x; System.out.println("带一个参数的构造函数 "); } }
SEU-LIST
多态性
• 静态(编译时) 方法重载 同一类中
• 动态(运行时) 方法覆盖 层次类中 接口 抽象类 抽象方法等
取经人void 除妖 ();
SEU-LIST
高级访问控制
访问控制 private成员
缺省的成员 protected成员
public成员
同一类中成员
同一包中其他类 ×
不同包中子类 × ×
不同包中非子类 × × ×
SEU-LIST
对象和类
类与对象的 JAVA 基础JAVA 面向对象特性
重载覆盖继承
UML 表示
26
SEU-LIST
UML 简介
27
• 统一建模语言 UML ( Unified Modeling Language )是一种绘制软件蓝图的标准语言。
• 可以用 UML 对软件密集型系统进行可视化、 详述、构造和文档化。
• 从企业信息系统到基于 Web 的分布式应用,甚至严格的实时嵌入式系统都适合于用 UML 来建模。
• 它是一种富有表达力的语言,可以描述开发所需要的各种视图,然后以此为基础开发系统。
SEU-LIST
UML 的特点
28
标准统一 面向对象
独立于过程 概念清晰简单易用
http://www.uml.orghttp://www.uml.org.cn
SEU-LIST
UML 元素
29
SEU-LIST
模型元素
30
构件名依赖泛化
关联
聚集(关联的一种形式)
类
属性
操作
用例名
SEU-LIST
类 HelloWorld
31
+pai nt()
Hel l oWorl d 第一行表示类名
第三行由类包含的操作或方法构成
第二行为空,因为该类中不需要属性
SEU-LIST
类的关系
32
+pai nt()
Hel l oWorl d
Applet
Graphics
泛化关系
依赖关系
SEU-LIST
用包来组织类
33
HelloWorld
java
applet
awt
lang
包被表示为带有标签的文件夹
有向的虚线段描述了对象与包之间的依赖关系
SEU-LIST
HelloWorld.java 的构件图
34
Hello.html
HelloWorld.java
Hello.jpg
HelloWorld.class
SEU-LIST
作业
• 构建动物、猫、老虎的类系结构 使用 UML 和代码分别表示
35