意义
封装是一种设计思想,是一种隐藏复杂过程和内部细节,确保过程能正常运行,留下简单接口提供给用户使用的设计思想。比如说我们所使用的遥控器,一般人都不知道遥控器内部设计和信号传输,但是不妨碍我们使用遥控器,我们正常使用是不能干预遥控器内部的工作原理。
好处:
1.能减少耦合
2.便于对类的设计
3.对内部成员进行精确操作
4.隐藏细节,留下简单操作
访问权限的介绍
修饰符private,default,protect,public从左到右,访问权限递增
private:只能是同一个类下的方法和成员访问
default(默认,即不加修饰符):同一个包下的其他类能访问
protected:不同包的子类和相同包下的其他类能访问
public:所有包下的类都能访问。
示例
- 观察private的范围
- 观察default的范围
- 观察protected的范围
如果你想调用私有的方法,你可以设计一个公有的方法,来调用这个私有的方法即可。这里会不会觉得这有点多此一举,直接调用就不完了吗,但是直接调用会影响类内部结构,可能导致程序奔溃(大程序),简单程序直接调用会比较方便,直接,影响不大不容易看出来问题。
package whllow;
public class test1 {
private int n;
private void sum() {
int sum=0;
for(int i=0;i<=n;i++)//求1+2+...+n的和
sum+=i;
System.out.println("sum="+sum); //输出结果
}
public void getsum() {
sum();//调用求和函数
}
public void setN(int n) {//设置n的值
this.n = n;
}
public static void main(String[] args) {
test1 t =new test1();
t.setN(10);
t.getsum();
}
}
whllow包下的代码
package whllow;
public class person {
int age;//default int age;
private int id;
protected String name;
public String sex;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id= id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
class test{
public static void main(String[] args) {
person tom = new person();
int id= tom.id;//private
int age= tom.age;//default int age;
String name =tom.name;//protected
String sex = tom.sex;//public
}
}
whllow1包下的代码
package whllow1;
import whllow.person;
public class student extends person{
public static void main(String[] args) {
student jack = new student();
int id= jack.id;//private
int age= jack.age;//default int age;
String name =jack.name;//protected
String sex = jack.sex;//public
person tom = new person();
String name1 =tom.name;//protected
}
}
Java类的成员一般是被设置成private,并为其设置setter和getter的方法,并且没有别的复杂的方法称为JavaBean
public class teacher {
private int id;
private String name;
private String sex;
private int salary;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getSalary() {
return salary;
}
public void setSalary(int salary) {
this.salary = salary;
}
}
setter和getter可以手写,但是eclipse提供了一些快捷键可以快速写好一个JavaBean
按住shift+alt+s就会弹出下面的界面,选择Generate Getters and Setters