一、封装
1、定义:对类的实现细节进行隐藏,对外只提供公开的方法供你使用,实现对数据的安全性
2、实现封装:
通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,而访问权限用来控制字段/方法能否直接在类外使用
3、访问修饰限定符
(1)private:只能在当前类中访问
(2)public:哪里都能访问
(3)protected:受保护的(在继承中会了解)
(4)什么都不写
class Student{
int age; //默认的:包访问权限
}
二、private实现封装
1、被private修饰的只能在当前类中访问
2、如何让另一个类拿到被private修饰的属性和方法呢?
class Preson{
private String name; //被private修饰的属性
public int age;
private void sleep(){ //被private修饰的方法
System.out.println(this.name + "正在睡觉");
}
public void setName(String name){
this.name = name;
}
public void func(){
this.sleep(); //使用被public修饰的func()方法,让其他类调用sleep()方法
}
}
public class TestDemo {
public static void main(String[] args) {
Preson preson = new Preson();
preson.setName("张三"); //访问name
preson.func();//访问sleep()方法
}
}
三、protected实现封装
需要了解继承后,才能理解
参考链接:可以参考Java-6 封装
四、包访问权限实现封装
当方法/属性前面什么都不写,就实现了包访问权限
1、什么是包
为了更好的管理类,把多个类放在一起成为一组,称为软件包,类似于文件夹。
在同一个工程中,允许存在相同名称的类,只要处在不同的包中即可
2、导入Java中自带的包
(1)放在哪
(2)举例:java.util 包,Java中不能直接导入包,需要说明导入包中的哪个类
java.util.*表示导入util包下的所有类,具体用到哪个,再加载哪个
3、包中的类冲突
解决方法:指定导入哪个包
import java.util.Date;
import java.sql.Date;
public class Test {
public static void main(String[] args) {
int[] array = {1,2,3};
java.util.Date date= new java.util.Date(); //指定导入util包
}
}
4、导入自定义包
(1)新建自定义包:src -> 新建 -> 包
(2)导入自定义包
5、包访问权限
demo1包
package com.bit.demo1;
public class TestDemo1 {
int a = 100; //包访问权限,只能在demo1包下访问
public static void main(String[] args) {
TestDemo1 demo1 = new TestDemo1();
System.out.println(demo1.a);//可以调用a
}
}
demo2包
package com.bit.demo2;
import com.bit.demo1.TestDemo1;
public class TestDemo2 {
public static void main(String[] args) {
TestDemo1 demo2 = new TestDemo1();
System.out.println(demo2.a); //报错,不能使用a
}
}