Chap02_对象和类

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
成员变量(对象属性) 成员变量(对象属性)
type methodname1(parameter-list){ //方法体 } … type methodnameN(parameter-list){ //方法体 } }
5
成员方法 (对象行为 或操作) 或操作)
定义方法
发往某个对象的消息对应于 一个方法调用。作为对消息 一个方法调用。 的响应, 的响应,对象将执行一个类 似于过程体的方法。 似于过程体的方法。方法是 包含在类中的函数。 包含在类中的函数。
方法重载(overloading)
方法重载是Java实现面向对象的多态性机制 的一种方式。 同一个类中多个方法有相同的名字,不同 的参数列表,这种情况称为方法重载。 返回类型不同并不足以构成方法重载。 当重载方法被调用时,编译器根据参数的 类型和数量来确定实际调用哪个重载方法 的版本。
方法重载示例
定义方法的一般格式:
[access] type methodname1([parameter-list]){ //方法体 }
方法名称 修饰符, 修饰符, 可选 返回类型 参数列表, 参数列表, 可选
• 举例: 举例:
public void setdate(int day, int month, int year){ day=23; month=7; year=2003; }
继承示例
class Employee { String name; //姓名 char sex; //性别 Employee(String n, char s){ name = n; sex = s; } class InheDemo { public String getName() { return name; } public static void main(String args[]) { public char getSex(){ return sex;}} Worker w = new Worker("M.John",'M','B',true); System.out.println("工人信息 工人信息 工人信息"); class Worker extends Employee { System.out.println("姓名 : "+w.getName()); 姓名 char category;//类别 类别 System.out.println("性别 : "+w.getSex()); 性别 boolean dressAllowance; //是否提供服装津贴 是否提供服装津贴 System.out.println("类别 : "+w.getCategory()); 类别 Worker(String n,char s,char c,boolean d){ if(w.getAll()) super(n,s); System.out.println("提供服装津贴 提供服装津贴 提供服装津贴"); category = c; dressAllowance = d; else } System.out.println(“未提供服装津贴”); 未提供服装津贴 未提供服装津贴” public char getCategory(){return category;} } public boolean getAll(){ return dressAllowance; } } }
6
JAVA类设计
形式
主类(含有main函数的类) 非主类
构成
访问权限、类名、类体 允许内部类、匿名类
与字节码文件(一一对应) 与源文件的关系(*.java)
源文件可以包含多个类 源文件名必须与其中的一个类名相同 源文件中至多有一个public类 源文件名要与public类名相同
7
对象作为参数
class Test{ int a,b; Test(int i,int j) { a=i; b=j; } //可以在函数中改变对象状态 void change(Test obj) { obj.a=50; obj.b=40; } }
29umluml的特点的特点概念清晰易于使用30模型元素模型元素构件名依赖关联聚集关联的一种形式属性操作31类类helloworldhelloworldpainthelloworld第一行表示类名第三行由类包含的操作或方法构成第二行为空因为该类中不需要属性32类的关系类的关系painthelloworldappletgraphics泛化关系依赖关系33用包来组织类用包来组织类helloworldjavaappletawtlang包被表示为带有标签的文件夹有向的虚线段描述了对象与包之间的依赖关系34helloworldjavahelloworldjava的构件图的构件图hellohtmlhelloworldjavahellojpghelloworldclass使用uml和代码分别表示作业作业35
类的修饰符
内部类与外部类 修饰内部类
Protected Private static
访问内部类
12
类与对象的JAVA基础 JAVA面向对象特性
重载 覆盖 继承
UML表示
对象和类
13
面向对象
融合数据和代码
封装 继承 多态
构建类系, 构建类系,实现抽象
高度抽象到一般抽象
是一个” “有一个”Has a 和“ 是一个”is a 有一个”
class Calculation { public void add( int a, int b) { int c = a + b; System.out.println("两个整数相加得 "+ c); class CalculationDemo { } public static void public void add( float a, main(String args[]) { float b){ float c = a + b; Calculation c = new System.out.println("两个浮点数相加得"+c); Calculation(); } c.add(10,20); public void add( String a,c.add(40.0F, 35.65F); String b) { String c = a + b; c.add("早上 早上", "好"); 早上 好 System.out.println("两个字符串相加得 "+ c); } } } 编译器决定 } 调用版本
当对象作为函数参数时, 当对象作为函数参数时, 在函数中只能改变该对 象的状态, 象的状态,但不能改变 该对象的引用 void swapobj(Day x,Day y){ Day temp=y; y=x; 引用本身 x=temp; 按值传递 }
obj1 obj2 x y Day 2003,7,23 Day 2002,5,30
方法覆盖示例
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方 将调用子类的 方 } 法
继承
ቤተ መጻሕፍቲ ባይዱ
继承是面向对象编程技术的一块 基石, 基石,它允许创建分等级层次的 运用继承, 类。运用继承,可以创建一个通 用类定义一系列一般特性。 用类定义一系列一般特性。该类 可以被更具体的类继承
被继承的类称为超类 继承父类的类称为子类 执行继承时,子类将获得父类的属性,并 具有自身特有的属性。
工人类, 工人类,继承了父 类的姓名和性别属 性外还包含类别和 是否有服装津贴属性
重载构造函数
Java 为每一个类自动提供缺省构造函数 缺省构造函数将成员变量的值初始化为 缺省值 public class constructOverload { int x; constructOverload() { 一旦创建了自己的构造函数,缺省的构 x=0; 造函数将不复存在。 System.out.println("不带参数的构造函数 不带参数的构造函数"); 不带参数的构造函数 } 重载构造函数提供了一组创建对象的方 constructOverload(int x){ this.x=x; 式,可以根据需要决定是否带初始参数 System.out.println("带一个参数的构造函数 带一个参数的构造函数"); 带一个参数的构造函数 。 }
改变对象 状态
调用swapobj(obj1,obj2) 调用
8
this引用
关键字 this 与对象关联 它用于指示当前对象
public class PassTest { 指明此对象的变 int x; 量 x 应赋值为 PassTest(int x) { 通过构造函数传 this.x=x; 递的自变量 x } 的值。 的值。 public void passingValue(){ System.out.println(“x 等于 " +x); } public static void main(String args[]) { PassTest test = new PassTest(10); test.passingValue(); } }
=
+

实 抽 例 象 化
4
创建类
class name { type variable1; … type variableN;
在类中, 在类中,属性是通过成员变 量体现的, 量体现的,而操作是用成员 函数(又称为方法)实现的。 函数(又称为方法)实现的。
Java中定义类的通用格式: 中定义类的通用格式: 中定义类的通用格式
}
方法覆盖(override)
方法覆盖是Java实现多态性机制的另一种方式。 在类层次结构中,如果子类中的一个方法与父类 中的方法有相同的方法名并具有相同数量和类型 的参数列表,这种情况称为方法覆盖。 当一个覆盖方法通过父类引用被调用,Java根据当 前被引用对象的类型来决定执行哪个版本的方法 。 可以通过super关键字调用直属父类中被覆盖的方 法版本。
方法覆盖(override)
方法覆盖是Java实现多态性机制的另一种方式。 在类层次结构中,如果子类中的一个方法与父类 中的方法有相同的方法名并具有相同数量和类型 的参数列表,这种情况称为方法覆盖。 当一个覆盖方法通过父类引用被调用,Java根据当 前被引用对象的类型来决定执行哪个版本的方法 。 可以通过super关键字调用直属父类中被覆盖的方 法版本。
Worker类: 类 category dressAllowance Emoloyee类: 类 name sex
职员类, 职员类,具 有姓名和性 别两个属性
主任类, 主任类,还包含 级别和是否配备 交通工具属性
Officer类: 类 empClass vehicle
extends关键字
extends关键字用于继承类。 声明一个继承父类的类的通常形式如下:
class subclass-name extends superclass-name { //类体 } 注意
没有extends,默认父类为Object ,默认父类为 没有 只能有一个父类, 只能有一个父类,即单继承 子类继承父类的全部成员
super关键字
super关键字用来解决如何直接访问或初始 化从父类继承来的属性。 super有两种通用形式:调用父类的构造函 数、用来访问被子类的成员覆盖的父类成 员。 它用在对象的构造函数中,将构造细节通 过继承链往上传递。 super()必须是在子类构造函数中的第一个 执行语句。
对象表示现实世界中某个具体的事物。 抽象是从特定的实例中抽取共同的性质以 形成一般化概念的过程。 对象具有两方面的含义:
在现实世界中: 在现实世界中: 是客观世界中的一个实体 在计算机世界中: 在计算机世界中: 是一个可标识的存储区域
3
类和对象 2-2
类是具有共同属性 和行为的对象的抽 象。 类可以定义为数据 和方法的集合。 类也称为模板,因 为它们提供了对象 的基本框架。
9
构造函数
构造函数名称与类名称相同 构造函数没有返回类型 其任务是在创建对象时初始化其内部状态
class Fruit { boolean seedLess; boolean seasonal; float price; Fruit(boolean seed, boolean season, float p) { seedLess = seed; seasonal = season; price = p; } }
JAVA面向对象程序设计
沈傲东 东南大学影像科学与技术实验室 Email: shen.list@ QQ: 8282149(请注明学号、姓名) 8282149(请注明学号 姓名) 请注明学号、
对象和类
类与对象的JAVA基础 JAVA面向对象特性
重载 覆盖 继承
UML表示
2
类和对象2-1
10
简单访问控制 - private 和 public
public 声明的数据成员和 成员函数可从类外部的任 何地方访问。 而private 数据将被隐藏, 在类外不可见,这就实现 了数据封装的思想。 要从类外操纵private 成员 ,只能通过类的public或 protected成员来实现。
11
相关文档
最新文档