Java 封装
一、概念
将类的某些信息隐藏在类内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问
原则:
① 把所有的属性藏起来
② 把尽可能多的东西藏起来,对外提供便捷的接口
二、封装的实现
① 修改属性的可见性,设为private,防止错误修改。
public class Penguin {
private String name; // 姓名
private int health; // 健康值
private int love; // 亲密度
}
② 创建公有的getter/setter方法(用于属性的读写)。
public class Penguin {
private String name; // 姓名
private int health; // 健康值
private int love; // 亲密度
// 创建getter/setter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth(){
return health;
}
public void setHealth(int health){
this.health=health;
}
public int getLove(){
return love;
}
public void setLove(int love){
this.love=love;
}
}
③ 在getter/setter方法中加入属性控制语句(对属性值的合法性进行判断)。
public class Penguin {
private String name;
private int health;
private int love;
public Penguin() {
super();
}
public Penguin(String name, int health, int love) {
super();
this.setName(name);
this.health = health;
this.love = love;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHealth(){
return health;
}
public void setHealth(int health){
if(health<0){
System.out.println("你的宠物早就死了,重新复活,默认赋值60");
this.health = 60;
return; //return在方法中的作用有两个,一个是返回结果值,另一个作用是结束方法后续代码的执行
}
this.health=health;
}
public int getLove(){
return love;
}
public void setLove(int love){
if(love<0){
System.out.println("多和你的宠物培养感情,默认提升亲密度到70");
this.love=70;
return;
}
this.love=love;
}
}
封装的好处:
① 便于使用者正确使用系统,防止错误修改属性
② 有助于系统之间的松耦合,提高系统独立性
③ 提高软件的可重用性
④ 降低了构建大型系统的风险
三、package包
1. 作用
① 允许类组成较小的单元(类似文件夹),易于找到和使用相应的文件。
② 防止命名冲突区分名字相同的类。
③ 有助于实施访问权限控制。
2. 创建包
作为Java源代码第一条语句,用package声明包,以分号结尾。
package cn.jbit.inherit; //声明包
public class School{
……
}
3. 包命名规范
① 包名由小写字母组成,不能以圆点开头或结尾。
package mypackage;
② 包名之前最好加上唯一的前缀,通常使用组织倒置的网络域名。
package net.javagroup.mypackage;
③ 包名后续部分依不同机构内部的规范不同而不同。
package net.javagroup.research.powerproject;
4. 导包
import 包名.类名;
- 系统包:java.util
import java.util.*; //导入java.util包中所有类
- 自定义包:cn.jtest.classandobject
import cn.jtest.classandobject.School; //导入指定包中指定类
*: 指包中的所有类
School :指包中的School类
注意事项:
- 一个类同时引用了两个来自不同包的同名类,必须通过完整类名来区分。
public class Demo01 {
/*
* 1)同一个包中不能有同名的类文件
* 2)同一个类文件中可以声明多个类,但是一个类文件中只能有一个public修饰的类,并且这个类名要和文件名保持一致
* 3)一般在一个类文件中只写一个类
*
*
*/
Scanner input = new Scanner(System.in);
//导入java.util.Date
java.util.Date date = new java.util.Date();
double num =Math.random();
//导入java.sql.Date()
java.sql.Date date2 = new java.sql.Date(123456789L);
}
- 每个包都是独立的,顶层包不会包含子包的类。
- package和import的顺序是固定的。
① package必须位于第一行(忽略注释行)
② 只允许有一个package语句
③ 其次是import
④接着是类的声明