2.抽象和封装
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
抽象和封装
0.英语单词
1.抽象
我们需要设计一个电子宠物系统,其中领养宠物功能的详细需求如下:
根据控制台提示,输入领养宠物的昵称;
根据控制台提示,输入领养宠物的类型,有两种选择:狗狗和企鹅;
如果选择狗狗,要选择狗狗的品种,有两种选择:‚聪明的拉布拉多犬‛或‚中华田园犬‛如果选择类型,选择企鹅的性别:‚Q仔‛或‚Q妹‛。
所领养宠物的健康值默认是100,表示非常健康。
所领养的宠物和主人的亲密度是0,表示和主人不熟。
在控制台打印宠物信息,包括昵称、健康值、亲密度、品种或性别,表示领养成功。
领养成功后主人可以和狗狗玩接飞盘的游戏,也可以让狗狗看家;如果领养的是企鹅,主人可以和企鹅一起游泳,也可以和企鹅玩过家家的游戏。
根据上面的描述,进行分析和设计,找出类,设计类;并画出类图!
分析:
1)先找简单名词
2)再找修饰性名词
3)然后找动词
4)优化
类图
抽象时遵循的原则:
属性、方法的设臵是为了解决业务问题的;
关注主要属性、方法;
如果没有必要、勿增加额外的类、属性和方法。
2.类的定义
生活中描述事物无非就是描述事物的属性和行为,如人有身高、体重等属性,有说话、打球等行为。
Java中用类(class)来描述事物也是如此,属性:对应类中的成员变量,行为对应类中的成员函数。
定义类其实就是定义类的成员:成员变量和成员函数。
实例Dog.java Penguin.java
3.成员变量和局部变量的区别:
成员变量定义在类中,在整个类中都可以被访问;
成员变量随着对象的创建而建立,存在于对象所在的堆内存中;
成员变量都有默认初始值。
局部变量定义在局部范围内(方法内、语句或语句块内);
局部变量存在于栈内存中,局部变量只在所在的范围内有效,超出作用范围,变量所占内存就会被释放;
局部变量没有默认值,必须初始化。
实例:
成员变量的初始值
引用数据类型null
基本数据类型
byte short int long 0
float double 0.0
char ‘’
boolean false
4.创建和使用对象
1)创建对象的语句Dog dog = new Dog(); Penguin penguin = new Penguin();
2)对象的内存结构
3)调用属性对象名.属性名
4)调用方法对象名.方法名
实例:Test.java
5.使用final定义常量
实例:Dog.java和Penguin.java的改进
6.使用static定义类成员
1)static关键字用于修饰成员:成员变量和成员函数代码块
2)被static修饰后的成员具有以下特点:
✧随着类的加载而加载;
✧优先于对象存在;
✧被该类的所有对象所共享;
✧可以不用构造对象而直接使用类名.成员名的形式调用
3)使用static关键字时应注意:
✧静态方法只能访问静态成员;
✧静态方法中不可以写this、super关键字;
✧主方法是静态的
✧实例方法中不能使用static
实例:Dog.java和Penguin.java的改进以及SweepMine.java
思考:为什么main()方法要被定义为static?
7.构造方法
1)特点:
✧方法名与类名相同(大小写必须一致)
✧不用定义返回值
✧不可以使用return语句
2)作用:给对象进行初始化
3)使用构造方法应该注意:
✧如果在一个类中没有显示的定义构造方法,系统会自动的为每个类添加一个无参的空的
构造方法
✧可以为一个类定义多个构造方法,多个构造方法是以重载的形式存在
实例:Dog.java和Penguin.java的改进
8.this关键字
1)特点:this代表其所在函数所属对象的引用,换言之this代表本类对象的引用。
2)何时使用this关键字:当在函数内需要用到调用该函数的对象时,就用this.
3)类中的方法(包括成员方法和构造方法)中要调用构造方法的形式:this(参数列表),需
要注意的是:在构造方法中要调用另一个构造方法,必须是第一句。
4)要使用本类对象的属性:this.属性名
实例:Dog.java 和Penguin.java改进
9.封装
1)封装(Encapsulation),是指隐藏对象的属性和实现细节,仅对外提供公共的访问方式。
2)好处:
✧将变化隔离;
✧便于使用;
✧提高重用性和安全性;
3)封装原则:
✧将不需要对外提供的内容都隐藏起来:属性私有、部分方法私有;
✧所有属性私有,提供公共的的getter方法进行访问,选择性提供setter方法;
✧setter方法中可以添加限制代码
实例:Dog.java和Penguin.java的改进
10.作业
1)将昨天的作业用Java实现。
要求:Dog类和Penguin类中提供打印宠物信息的方法,根据控制台提示的信息选择领养的宠物为狗狗,输入昵称、品种等信息,然后打印宠物信息表示领养成功
2)改进作业1,给Dog类和Penguin类提供构造方法。
要求:为Dog类和Penguin类至少提供的两个构造方法;
3)改进作业1,对企鹅对象的性别属性进行设定和修改。
要求:给Penguin类提供SEX_MALE和SEX_FEMALE两个常量,分别取值‚Q仔‛或‚Q 妹‛,后来要求变化,规定企鹅的性别只能取值‚雄‛或‚雌‛,通过修改静态常量值实现该需求。
4)增加Monkey类,为该类提供类似于Penguin的属性和特有属性,以及类似于Penguin 类的方法和特有方法
Monkey
name, love,health,....
print(), climbTree(), xxxYYY()
5)建立企鹅所有类的私有化。