第三章 面向对象编程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
20
上机练习(一)
编写一个复数类,具有实部、虚部成员变量, 可以完成加、减、乘、获得实部和虚部等方 法,并编写一个主类对其进行测试。 使用OOP的概念对图书馆的书籍借阅情况进 行OOA分析,正确整理出书籍类和学生类应 具有的数据和方法,作出一份小文档来描述。
21
方法重载
一个类中可以有多个方法具有相同的名字和类型, 但这些方法的参数必须不同(个数或类型)。 但不允许方法的名字相同而其类型不同。
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;} }
实现了信息的隐藏及安全性 提高了程序的模块化,且易于维护
继承(inheritance)
交通工具 父类/超类
车 船 飞机
(superclass)
Java仅支持 单重继承, 火车 但可通过 接口实现 子类 (subclass) 多重继承
4
汽车
继承(续)
OOP的主要特点(续)
体现了对现实世界的抽象模拟 提高了代码的复用性
类 private protected:该类自身、子类 缺省:本包中的类
static:类成员变量,对所有的实例一致,
引用时前缀可使用类名或对象名 final:数值不变常量,定义同时应对其进 行初始化
12
成员变量的声明(续)
例: class shape{ private protected int x; private protected int y; static final float MaxArea=100.0f; …………………….. }
}
17
例:银行业务
要求:处理简单帐户存取款、查询 面向对象的分析(OOA)
对象模型抽象:银行帐户
对象模型分析: 余额、存、取、查
面向对象的设计(OOD)
对象模型的实现:类及其成员定义 BankAccount类 Banlance, etc getBalance(), getMoney(), etc
7
JAVA中类的声明
类说明语法:
[ 类修饰符] class 类名 [ extends 超类名 ] [ implements 接口名 ] { 成员变量定义; 类体 方法定义; }
8
JAVA中类的声明(续)
类修饰符(Modifier):
public:允许其他类(没有限制)访问本类,一个源文件
18
银行业务的程序结构
银行帐户类BankAccount
数据:余额、利率
操作:查询余额、存款、取款 查询利率、设置利率
主类UseAccount
main()方法,创建BankAccount 类的对象,并完成相应操作
19
封装小结
类中的数据使用private定义 使用public方法来操作数据 把逻辑上相关联的数据封装成新的类来使用, 类似结构体 不要定义太庞大的类,要把无关的功能适当 分离 培养良好的编程风格
23
构造方法(constructor)
问题的提出
Java试图在每个对象一诞生时,就给它一确定的
状态,但有时这种系统的缺省初值不 合适;所以在创建一个新对象时,需用构造 方法完成合法的初始化,使类内成员的初始 化工作不依赖于外界完成。
24
构造方法
一种特殊方法 名字必须与它所在的类的名字完全相同 不返回任何数据类型,即void型(void可 以省略不写) 可以完成更多的操作,而不仅仅局限于 变量的初始化;另外还可创建多个构造 函数(重载)。
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和默认构造方法。 ... } }
13
方法的声明
定义对类内成员变量(数据)的操作 方法的声明语法:
[修饰符] 返回类型 方法名(参数列表) [ throws 例外名 ] { 方法体; }
方法的性质、接受哪些参数、如何返回 信息
14
方法的声明(续)
修饰符(Modifier):
访问控制符: public、private、protected、private protected
33
2.对象的内存模型
运行到zhubajie=new Xiyoujipeople()时,系 统做两件事:
为head,ear,hand,foot,mouth各变量分配内存 给出一个信息,以确保这些变量是属于zhubajie
的。方法:分配内存后,返回一个引用(指针) 给zhubajie
34
2.对象的内存模型
多态(polymorphism)
用同一个名字调用实现不同操作的方法 方式1:不同的类之间的同名方法
如:中国人/日本人/美国人 说话 方式2:参数不同的同名方法(如加号) 使用方便,且降低了维护和编程量
5
JAVA中的OOP
几个概念
类:抽象的集合概念 系统类库中已定义好的类 用户自定义的类 对象(实例instance):实际个体 创建某个类的具体对象(类似变量声明) 类名 欲创建的对象名 = new 类名( 参数表 ) ;
仅可以有一个public类 缺省:可被当前包中的其他类访问 abstract:没有实例的抽象概念类 final:不能再被扩展,不包含子类的类;易于安全性的实 现,或用于创建固定功能的类
父类继承声明:extends 父类名 实现接口(interface):implements 接口名
9
JAVA中类的声明(续)
例: public abstract class shape{…………} class rectangle extends shape{…………} final class roundrect extends rectangle {………………….} ?? final可以与abstract一起使用吗?
局部变量与成员 变量名字相同, 则成员变量隐藏
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; }
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 } }
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;} }
例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 } }
28
三、对象
类是创建对象的摸板。
创建对象
对象的内存模型 使用对象
对象是引用型变量
实例变量和类变量的区别 实例方法和类方法的区别
29
1.创建对象
两个步骤:
对象的声明 类的名字 对象名字; 如:Point p1; A a;
为对象分配内存
使用new运算符和类的构造方法为声明的对象分 配内存,如果类中没有构造方法,系统会调用默认 的构造方法。 如:p1=new Point(); a=new A();
static:静态方法,又称类方法 使用类名或对象名作为前缀,建议使用类名 在方法体中只能使用static变量和static方法 abstract:只有接口没有语句,要在子类中通过
重新定义(override)来实现 final:不能被重新定义(override)
15
方法的声明(续)
返回类型:void、return 参数列表:参数类型可为类类型 throws:
0
0 zhubajie zhubajie null height weight head hand foot mouth
例如: String s = new String( “Hello!” ) ;
继承、子类、父类
6
JAVA中的OOP(续)
Java中的类结构
基类:所有JAVA的类都派生自Object Java的类可组织在包(package)中 Java提供的标准类库分布在一系列的包中,如
java.lang,java.util,java.net等 编程的过程就是继承基类或标准类而创建、定义 特殊子类的过程
10
类的成员变量的声明
声明成员变量〔member〕的语法
[修饰符] 数据类型 变量名;
引用:对象名.变量 修饰符 访问控制符
public:可被所有其他类引用
private:仅可被该类自身引用和修改,不
能被其他任何类(包括子类)引用
11
成员变量的声明(续)
protected:该类自身、子类、同一包中的其他
面向对象编程
主要内容
OOP的概念及特点 Java中面向对象编程
创建自定义类、接口和包
类的继承
构造函数
应用编程
Java类库介绍 数组与字符串
2
OOP概念
过程式程序设计Baidu Nhomakorabea
函数 函数 函数 函数
方法
OOP程序设计
消息
数据
方法
公共数据
数据
算法+数据结构
对象+消息
3
OOP的主要特点
封装(encapsulation)
通告本方法中会产生的例外(异常)类型,
提醒调用者要对相应的可能例外进行处理。 当执行此方法并发生了例外时,程序会转入 调用者编制的例外处理程序段。
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; }