黑马程序员-------类的封装

来源:互联网 发布:c语言输出tab 编辑:程序博客网 时间:2024/05/13 18:34

对象的独立性是通过封装实现的,将抽象得到的数据成员和代码成员相结合,形成一个统一的有机整体,也就是说,将数据与操作数据的行为进行有机的结合、统一。通过封装,一部分成员作为类与外部的接口,其他成员则被很好地隐蔽起来,以实现对数据访问权限的合理控制,使程序中不同部分之间的相互影响减小到最低。这样可以达到增强安全性和简化程序编写工作的目的。

java语言中,对象就是对一组变量和相关方法的封装,其中变量表明了对象的状态,方法表明了对象具有的行为。通过对象的封装,实现了模块化和信息隐藏。通过对类的成员施以一定的访问权限,实现了类中成员的信息隐藏。

◇ 类体定义的一般格式:

class className

  [public | protected | private ] [static] 

     [final] [transient] [volatile] type

     variableName; //成员变量

     [public | protected | private ] [static]

     [final | abstract] [native] [synchronized]

     returnType methodName([paramList])

     [throws exceptionList]

     {statements} //成员方法

  }

◇ java类中的限定词

java语言中有四种不同的限定词,提供了四种不同的访问权限。

1) private 

类中限定为private的成员,只能被这个类本身访问。

如果一个类的构造方法声明为private,则其它类不能生成该类的一个实例。

2) default

类中不加任何访问权限限定的成员属于缺省的(default)访问状态,可以被这个类本身和同一个包中的类所访问。

3) protected

类中限定为protected的成员,可以被这个类本身、它的子类(包括同一个包中以及不同包中的子类)和同一个包中的所有其他的类访问。

4) public

类中限定为public的成员,可以被所有的类访问。

3-1列出了这些限定词的作用范围。

【表3-1】 java中类的限定词的作用范围比较

同一个类

同一个包 

不同包的子类 

不同包非子类

private

*

default 

*

*

protected

*

*

*

public

*

*

*

*

【任务训练2

用类图描述电子宠物系统的设计,并编写代码实现领养宠物功能

【训练目的】:

1.使用类图描述设计

2.掌握面向对象设计基本步骤

3.掌握类和对象的概念

4.掌握构造方法及其重载

5.掌握封装的概念及其使用

【任务实现】

1、根据“对象”抽象出“类”,找出宠物类共有的属性和行为。用类图描述Dog类和Penguin类的设计

       

2、编写宠物类DogPenguin

/**

 * 宠物狗狗类,使用权限修饰符privatepublic进行封装。

 * @author 

 */

class Dog {

private String name = "无名氏"; // 昵称

private int health = 100; // 健康值

private int love = 0; // 亲密度

private String strain = "聪明的拉布拉多犬"; // 品种

/**

 * 通过构造方法指定狗狗的昵称、品种

 * @param name 昵称

 * @param strain 品种

 */

public Dog(String name, String strain) {

this.name = name;

this.strain = strain;

}

/**

 * 通过吃饭增加健康值。

 */

public void eat() {

if (health >= 100) {

System.out.println("狗狗需要多运动呀!");

} else {

health = health + 3;

System.out.println("狗狗吃饱饭了!");

}

}

/**

 * 通过玩游戏增加与主人亲密度,减少健康值。

 */

public void play() {

if (health < 60) {

System.out.println("狗狗生病了!");

} else {

System.out.println("狗狗正在和主人玩耍。");

health = health - 10;

love = love + 5;

}

}

/**

 * 读取狗狗昵称。

 * @return 昵称

 */

public String getName() {

return name;

}

/**

 * 读取狗狗健康值。

 * @return 健康值

 */

public int getHealth() {

return health;

}

/**

 * 读取狗狗亲密度。

 * @return 亲密度

 */

public int getLove() {

return love;

}

/**

 * 读取狗狗品种。

 * @return 品种

 */

public String getStrain() {

return strain;

}

/**

 * 输出狗狗的信息。

 */

public void print() {

System.out.println("宠物的自白:\n我的名字叫" + this.name 

+ ",健康值是" + this.health + ",和主人的亲密度是

+ this.love + ",我是一只 " + this.strain + "");

}

}

/**

 * 宠物企鹅类,使用静态常量。

 */

public class Penguin {

String name = "无名氏"; // 昵称

int health = 100; // 健康值

int love = 0; // 亲密度

static final String SEX_MALE ="Q";

static final String SEX_FEMALE="Q";

//static final String SEX_MALE = "";

//static final String SEX_FEMALE = "";

String sex = SEX_MALE; // 性别

/**

 * 输出企鹅的信息。

 */

public void print() {

System.out.println("宠物的自白:\n我的名字叫" + this.name 

+ ",健康值是" + this.health  + ",和主人的亲密度是

+ this.love + ",性别是 " + this.sex + "");

}

}

3、测试

import java.util.Scanner;

/**

 * 领养宠物。

 * @author 

 */

public class Test {

public static void main(String[] args) {

Scanner input = new Scanner(System.in);

System.out.println("欢迎您来到宠物店!");

// 1、 输入宠物名称

System.out.print("请输入要领养宠物的名字:");

String name = input.next();

// 2、 选择宠物类型

System.out.print("请选择要领养的宠物类型:(1、狗狗 2、企鹅)");

switch (input.nextInt()) {

case 1:

// 2.1、如果是狗狗

// 2.1.1、选择狗狗品种

System.out.print("请选择狗狗的品种:(1、聪明的拉布拉多犬" +

" 2、酷酷的雪娜瑞)");

String strain = null;

if (input.nextInt() == 1) {

strain = "聪明的拉布拉多犬";

} else {

strain = "酷酷的雪娜瑞";

}

// 2.1.2、创建狗狗对象并赋值

Dog dog = new Dog(name,strain);

// 2.1.3、输出狗狗信息

dog.print();

break;

case 2:

// 2.2、如果是企鹅

// 2.2.1、选择企鹅性别

System.out.print("请选择企鹅的性别:(1Q仔 2Q妹)");

String sex = null;

if (input.nextInt() == 1)

sex = "Q";

else

sex = "Q";

// 2.2.2、创建企鹅对象并赋值

Penguin pgn = new Penguin();

pgn.name = name;

pgn.sex = sex;

// 2.2.3、输出企鹅信息

pgn.print();

}

}

}