一. 封装的概念和特点
- 封装:
将类的某些信息隐藏在类内部,不允许外部程序直接访问;
通过该类提供的方法来实现对隐藏信息的操作和访问;
隐藏对象的信息;
留出访问的接口。 - 封装的特点:
(1) 只能通过规定的方法访问数据;
(2) 隐藏类的实例细节,方便修改和实现。
二. 封装的代码实现
- 实现步骤
(1) 修改属性的可见性,将其修改为private,表明这个属性只能在当前类内被访问,出了这个类,就不能被访问了;
(2) 创建getter/setter方法,设为public方法,用于属性的读写,设置了这两个公有的方法,就可以在类外完成私有属性的访问了;
(3) 在getter/setter方法中加入属性控制语句,对属性的合法性进行判断(比如性别只能输入男或者女,年龄只能输入为正值等等)。
案例:
package com.study.animal;
public class Cat {
// 成员属性:昵称、年龄、体重、品种
// 修改属性的可见性---private 限定只能在当前类内访问
private String name;// 昵称 String类型默认值null
private int month;// 年龄 int类型默认值0
private double weight;// 体重 double类型默认值0.0
private String species;// 品种
// 创建get/set方法
public void setName(String name) {
this.name = name;
}
public String getName() {
return "我是一只名叫:" + this.name + "的宠物猫";
}
在主方法内调用get/set方法
package com.study.animal;
//单一职责原则
public class CatTest {
public static void main(String[] args) {
// 对象实例化
// Cat one = new Cat(3);
Cat one = new Cat();
// 测试
one.setName("喵喵");
System.out.println("昵称:" + one.getName());
}
}
(4) 快速定义get/set方法
在定义完如下私有属性后:
/ 成员属性:昵称、年龄、体重、品种
// 修改属性的可见性---private 限定只能在当前类内访问
private String name;// 昵称 String类型默认值null
private int month;// 年龄 int类型默认值0
private double weight;// 体重 double类型默认值0.0
private String species;// 品种
鼠标右键,点击Source
→
\to
→Generate Getters and Setters
→
\to
→勾选需要生成getters和setters的私有属性
注:只有getXXX方法的属性是只读属性;只有setXXX方法的属性是只写属性。
可以通过异常处理优化程序,后面会详细介绍。
3. 定义包
(1) 语法:
package 包名;
例如:package com.study.animal;
(2) 注意:
a. 必须放在Java源文件中的第一行;
b. 一个Java源文件中只能有一个package语句;
c. 包名全部英文小写;
d. 命名方式:域名倒序+模块+功能