1、什么是封装
1.1、封装的概念
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。
1.2、封装的两个大致原则
1)把尽可能多的东西藏起来,对外提供便捷的接口;
2)把所有的属性藏起来;
2、如何实现封装
3、封装的好处
便于使用者正确使用系统,防止错误修改属性
有助于系统之间的松耦合,提高系统独立性
提高软件的可重用性
降低了构建大型系统的风险
4、例:使用封装实现企鹅类
使用封装实现电子宠物系统的企鹅类正确输入健康值和亲密度
保证健康值的有效性(0-100),否则取默认值60
保证亲密度的有效性(0-100),否则取默认值60
public class Penguin {
// 定义属性
private String name;
private int health;
private int love;
public Penguin() {
}
public Penguin(String name, int health, int love) {
this.name = name;
this.health = health;
this.love = love;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return name;
}
public void setHealth(int health){
//调用此方法来给对象的health赋值,在赋值前对传过来的health进行判断
if(health<0||health>100){
System.out.println("您输入的健康值有误,默认给健康值赋值为60");
this.health = 60;
return;//这里的return作用是结束方法后续代码的执行
}
this.health =health;
}
public int getHealth(){
return health;
}
public void setLove(int love){
//对传递过来的love值进行判断
if(love<0||love>100){
System.out.println("您输入的亲密度值有误,默认给亲密度赋值为80");
this.love=80;
return;
}
this.love=love;
}
public int getLove(){
return love;
}
// 定义一个方法输出对象信息
public void printInfo() {
System.out.println("宠物信息:昵称:" + this.name + ",健康值:" + this.health
+ ",亲密度:" + this.love);
}
}
public class PenguinTest {
public static void main(String[] args) {
// 使用无参构造方法创建Penguin类的对象
Penguin penguin1 = new Penguin();
// 给对象penguin1的属性赋值,因为name属性使用private修饰了,所以不能同对象名.属性名直接给name属性赋值,只能是用其它方式给name属性赋值
// penguin1.name = "QQ";
// System.out.println(penguin1.name);
penguin1.setName("QQ");
String name =penguin1.getName();
System.out.println(name);
penguin1.setHealth(-90);
System.out.println(penguin1.getHealth());
penguin1.setLove(-99);
System.out.println(penguin1.getLove());
}
}
5、包(package)
5.1、包的作用
1)允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件
2)有助于实施访问权限控制
3)防止命名冲突 区分名字相同的类
5.2、如何创建包
1)作为Java源代码第一条语句
2)用package声明包,以分号结尾
5.3、包命名规范
1)包名由小写字母组成,不能以圆点开头或结尾
package mypackage;
2) 包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名
package net.javagroup.mypackage;
3) 包名后续部分依不同机构内部的规范不同而不同
package net.javagroup.research.powerproject;
5.4、用MyEclipse创建包
1)JDK提供基本包
a、java.lang:虚拟机自动引入
b、java.util:提供一些实用类
c、java.io:输入、输出
2)使用MyEclipse创建包的两种方法
a、分别创建包和类
b、创建类的过程中创建类所在的包
5.5、如何导入包
为了使用不在同一包中的类,需要在Java程序中使用import关键字导入这个类
1)系统包:java.util
2)自定义包:cn.jtest.classandobject
*:指包中的所有类
School:指包中的School类
5.6、使用包的注意事项
1)一个类同时引用了两个来自不同包的同名类
必须通过完整类名来区分
2)每个包都是独立的,顶层包不会包含子包的类
3)package和import的顺序是固定的
a、package必须位于第一行(忽略注释行)
b、只允许有一个package语句
c、其次是import
d、接着是类的声明