当前位置:文档之家› 第三章 面向对象编程

第三章 面向对象编程


}
17
例:银行业务
要求:处理简单帐户存取款、查询 面向对象的分析(OOA)
对象模型抽象:银行帐户
对象模型分析: 余额、存、取、查
面向对象的设计(OOD)
对象模型的实现:类及其成员定义 BankAccount类 Banlance, etc getBalance(), getMoney(), etc
局部变量与成员 变量名字相同, 则成员变量隐藏
this.x和this.y 代表成员变 量
27
一个值得注意的问题

一个类中的方法可以互相使用
float min(float x, float y) { if(x<=y) return x; else return y; } }
class A { float a,b; void sum(float x, float y) { a=max(x,y); b=min(x,y);} float max(float x, float y) { if(x<=y) return y; else return x; }
例2
class Point { int x,y; Point() //constructor { x=12; y=16; } Point(int a,int b) //constructor { x=a; y=b; } } public class B { public static void main(String args[ ]) { Point p1,p2; //声明对象p1和p2 p1=new Point(); //为对象分配内存,使用new p2=new Point(23,35); //和类中的构造方法。 … 32 } }
7
JAVA中类的声明
类说明语法:
[ 类修饰符] class 类名 [ extends 超类名 ] [ implements 接口名 ] { 成员变量定义; 类体 方法定义; }
8
JAVA中类的声明(续)

类修饰符(Modifier):
public:允许其他类(没有限制)访问本类,一个源文件

通告本方法中会产生的例外(异常)类型,
提醒调用者要对相应的可能例外进行处理。 当执行此方法并发生了例外时,程序会转入 调用者编制的例外处理程序段。
16
方法的声明(续)

例:
class shape{ private int x; static float MaxArea=100.0f; public void setx(int newx){x=newx;} public int getx( ){return x} public static void setMA(float newMA){ MaxArea=newMA; }
仅可以有一个public类 缺省:可被当前包中的其他类访问 abstract:没有实例的抽象概念类 final:不能再被扩展,不包含子类的类;易于安全性的实 现,或用于创建固定功能的类
父类继承声明:extends 父类名 实现接口(interface):implements 接口名

10
类的成员变量的声明

声明成员变量〔member〕的语法
[修饰符] 数据类型 变量名;
引用:对象名.变量 修饰符 访问控制符

public:可被所有其他类引用
private:仅可被该类自身引用和修改,不
能被其他任何类(包括子类)引用
11
成员变量的声明(续)
protected:该类自身、子类、同一包中的其他
28
三、对象

类是创建对象的摸板。
创建对象
对象的内存模型 使用对象
对象是引用型变量
实例变量和类变量的区别 实例方法和类方法的区别
29
1.创建对象

两个步骤:
对象的声明 类的名字 对象名字; 如:Point p1; A a;
为对象分配内存
使用new运算符和类的构造方法为声明的对象分 配内存,如果类中没有构造方法,系统会调用默认 的构造方法。 如:p1=new Point(); a=new A();
30
两个例子
例1
class Xiyoujipeople { float hight,weight; String head,ear,hand,foot,mouth; void speak(String s) { System.out.println(s); } } class A { public static void main(String args[ ]) { Xiyoujipeople zhubajie; //声明对象 zhubajie=new Xiyoujipeople(); //为对象分配内存, //使用new和默认构造方法。 ... 31 } }
面向对象编程
主要内容
OOP的概念及特点 Java中面向对象编程

创建自定义类、接口和包
类的继承
构造函数

应用编程
Java类库介绍 数组与字符串
2
OOP概念
过程式程序设计
函数 函数 函数 函数
方法
OOP程序设计
消息
数据
方法
公共数据
数据
算法+数据结构
对象+消息
3
OOP的主要特点

封装(encapsulation)
0
0 zhubajie zhubajie null height weight head hand foot mouth

多态(polymorphism)
用同一个名字调用实现不同操作的方法 方式1:不同的类之间的同名方法
如:中国人/日本人/美国人 说话 方式2:参数不同的同名方法(如加号) 使用方便,且降低了维护和编程量
5
JAVA中的OOP

几个概念
类:抽象的集合概念 系统类库中已定义好的类 用户自定义的类 对象(实例instance):实际个体 创建某个类的具体对象(类似变量声明) 类名 欲创建的对象名 = new 类名( 参数表 ) ;
static:静态方法,又称类方法 使用类名或对象名作为前缀,建议使用类名 在方法体中只能使用static变量和static方法 abstract:只有接口没有语句,要在子类中通过
重新定义(override)来实现 final:不能被重新定义(override)
15
方法的声明(续)
返回类型:void、return 参数列表:参数类型可为类类型 throws:

25
构造方法
构造方法只能在创建类对象时由系统隐 含调用,而不能直接引用; 类对象创建 时,利用运算符 new 在内存中开辟专用 空间,存放指定的类的实例(即对象), 这时会自动执行类的构造方法,初始化 新对象的成员变量 例:Point类

26
构造方法
class Point { int x,y; Point() { x=67; y=100;} Point(int x, int y) { this.x=x; this.y=y;} }
23
构造方法(constructor)

问题的提出
Java试图在每个对象一诞生时,就给它一确定的
状态,但有时这种系统的缺省初值不 合适;所以在创建一个新对象时,需用构造 方法完成合法的初始化,使类内成员的初始 化工作不依赖于外界完成。
24
构造方法
一种特殊方法 名字必须与它所在的类的名字完全相同 不返回任何数据类型,即void型(void可 以省略不写) 可以完成更多的操作,而不仅仅局限于 变量的初始化;另外还可创建多个构造 函数(重载)。
13
方法的声明
定义对类内成员变量(数据)的操作 方法的声明语法:

[修饰符] 返回类型 方法名(参数列表) [ throws 例外名 ] { 方法体; }

方法的性质、接受哪些参数、如何返回 信息
14
方法的声明(续)

修饰符(Modifier):
访问控制符: public、private、protected、private protected
2.对象的内存模型

用一个例子来说明:
class Xiyoujipeople { float height,weight; String head,ear,hand,foot,mouth; void speak(String s) { System.out.println(s); } } class A { public static void main(String args[ ]) { Xiyoujipeople zhubajie; //声明对象 zhubajie=new Xiyoujipeople(); //为对象分配内存, //使用new和默认构造方法。 ... } }
类 private protected:该类自身、子类 缺省:本包中的类
static:类成员变量,对所有的实例一致,
引用时前缀可使用类名或对象名 final:数值不变常量,定义同时应对其进 行初始化
12
成员变量的声明(续)

例: class shape{ private protected int x; private protected int y; static final float MaxArea=100.0f; …………………….. }

22
方法重载
class Tom { float jerry(float s) {return s;} float jerry(float x, int y) {return x*x+y*y;} float jerry(int x, float y) {return x*x+y*y;} float jerry(float x, float y, float z) {return x*x+x*y+z;} }
相关主题