首页 > 技术文章 > Java面向对象学习(一)面向对象三大特性----封装

ruanzhendong 2021-07-16 16:57 原文

1.封装的定义

数据的隐藏:禁止直接访问一个对象中数据的实际表示,而应通过操作接口来访问

程序设计要求”高内聚,低耦合

高内聚类的内部数据操作细节由自己完成,不允许外部干涉

低耦合仅暴露少量的方法给外部使用

 

 

2.封装:属性私有(Private),用get/set方法调用

1)先编写一个无封装的程序

创建一个demo04的包,包中添加一个Student.java(Student类)

1 public class Student {
2     //定义一些属性,也叫成员变量
3     public String name;
4     public int id;
5     public char sex;
6 
7 
8     //也可以定义一些方法,但是很少用方法的封装,所以这里不写了。
9 }

2)与demo04平行目录创建一个Application.java(Application类)

1 public class Application {
2     public static void main(String[] args) {
3         Student student = new Student();
4         System.out.println(student.name);
5     }
6 }

这里可以运行看到,在Application中可以正常调用Student类中的属性。

3)但是如果写成封装,那么就要将Student中的属性私有(在定义的属性前添加private),代码如下

1 public class Student {
2     //定义一些属性,也叫成员变量
3     private String name;
4     private int id;
5     private char sex;
6 }

4)这样的话,在Application中可以就不能直接调用Student类中的属性,于是我们要在Student类中编写get、set方法来Application中可以调用,赋值这些属性

 1 public class Student {
 2     //定义一些属性,也叫成员变量
 3     //一般属性都会写成私有
 4     private String name;
 5     private int id;
 6     private char sex;
 7     //获得name属性值的方法
 8     public String getName(){
 9         return this.name;
10     }
11     //设置name属性值的方法
12     public void setName(String name){
13         this.name=name;
14     }
15  }

5)这样就可以直接在main方法中利用get、set方法来调用这些属性

1 public class Application {
2     public static void main(String[] args) {
3         Student student = new Student();
4         student.setName("小明");
5         String xiaoming=student.getName();
6         System.out.println(xiaoming);
7     }
8 }

6)也可以在get、set方法中做一些对程序的检查及规避一些风险,例如可以在Student中对age的值进行检查

1 public void setAge(int age) {
2         if (age<120 && age>0){
3             this.age = age;
4         }else {
5             this.age=3;
6         }

那么如果在调用age这个属性时输入不合法的年龄如999,就会输出3

1     student.setAge(999);
2     System.out.println(student.getAge());

7)IDEA快捷键添加get、set方法

 Alt+Insert

 

 选择想要添加get、set方法的属性

 

程序就会自动生成了

 

 

 3.封装的意义

1)提高程序安全性,保护数据

2)隐藏代码的实现细节

3)统一接口,只用get、set方法调用

4)提高程序的可维护性

 

推荐阅读