黑马程序员-------类的封装
来源:互联网 发布: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、编写宠物类Dog和Penguin
/**
* 宠物狗狗类,使用权限修饰符private和public进行封装。
* @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("请选择企鹅的性别:(1、Q仔 2、Q妹)");
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();
}
}
}
- 黑马程序员-------类的封装
- 黑马程序员------类的封装
- 黑马程序员_Java的封装
- 黑马程序员 String封装类
- 黑马程序员——封装ip地址的类InetAddress
- 【黑马程序员】有关内部类和封装类的总结
- 黑马程序员--------8种基本数据类型的封装类
- 黑马程序员-类的封装,继承和多态
- 黑马程序员------OC类的封装 继承 多态
- 黑马程序员_java中封装的作用
- 黑马程序员---基础强化---封装的作用
- 【黑马程序员】-oc中对象的封装
- 黑马程序员-----OC学习之类的封装
- 黑马程序员----基本数据类型封装类
- 黑马程序员-oc基础类方法 封装
- 10.黑马程序员-封装
- 黑马程序员_day07_封装
- 黑马程序员-封装
- Ubuntu 10.10 下使用RVM安装配置Ruby, Rails 3
- 《阿勇java建站教程》1.5-css样式使用
- Nginx配置文件nginx.conf中文详解(总结)
- 每个C++开发者都应该使用的十个C++11特性
- jsp超链接打开一个新的窗口
- 黑马程序员-------类的封装
- Flex 利用Grid制作复杂表格
- 关于udelay(); mdelay(); ndelay(); msleep();
- RVM中文使用指南
- Android4.0 G-Sensor工作流程
- 图片倒影效果
- 浏览器渲染页面、CSS原理及优化
- Oracle和SQL SERVER在SQL语句上的差别
- java 重写和重载