2.抽象和封装

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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)建立企鹅所有类的私有化。

相关文档
最新文档