官方定义:一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数
据被外部类定义的代码随机访问。

大白话定义:通过getter和setter方法访问私有的在成员变量。

功能:

1、更容易修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

2、可以对成员变量进行更精确的控制。

例子:
1、更容易修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
eg. 把下列age类型从 int 改成 String。

 class Husband{
public int age; // public
public String name;
} class Wife{
private int age; // private
private String name; void setAge(int age){
this.age = age;
} void setName(String name){
this.name = name;
} int getAge(){
return age;
} String getName(){
return name;
} } public class TestEncapsulation {
public static void main(String[] args) {
Husband h1 = new Husband();
h1.age = 21;
h1.name = "a1"; Husband h2 = new Husband();
h2.age = 22;
h2.name = "a2"; Wife w1 = new Wife();
w1.setAge(18);
w1.getAge(); Wife w2 = new Wife();
w2.setAge(19);
w2.getAge(); System.out.println(h1.age);
System.out.println(w2.getAge()); }
}

改:Husband 类 要改外设调用程序;Wife 类需内改动。同时,假设有100个Husband对象和100个Wife对象,显然改Wife 类要容易。

1 class Husband{
2 public String age; // 改成 String
3 public String name;
4 }
5
6 class Wife{
7 private String age; // 改成 String
8 private String name;
9
10 void setAge(int age){
11 this.age = String.valueOf(age);
12 }
13
14 void setName(String name){
15 this.name = name;
16 }
17
18 String getAge(){ // 改成 String
19 return age;
20 }
21
22 String getName(){
23 return name;
24 }
25
26 }
27
28
29 public class TestEncapsulation {
30 public static void main(String[] args) {
31 Husband h1 = new Husband();
32 h1.age = “21”; // 改调用程序
33 h1.name = "a1";
34
35 Husband h2 = new Husband();
36 h2.age = "22";
37 h2.name = "a2";
38
39
40 Wife w1 = new Wife();
41 w1.setAge(18);
42 w1.getAge();
43
44 Wife w2 = new Wife();
45 w2.setAge(19);
46 w2.getAge();
47
48
49
50 System.out.println(h1.age);
51 System.out.println(w2.getAge());
52
53 }
54 }

2、可以对成员变量进行更精确的控制。

eg. 对于Husband类的 age 属性可能会误操作成

Husband  h1 = new Husband();
h1.age = ; // hi.age = -20;
h1.name = "a1";

可以通过setter方法来避免这类错误

void setAge(int age){
if(age<0||age>120){
System.out.println("age is wrong!");
}else{
this.age = age;
}
}

Java总结(一):封装——Encapsulation的更多相关文章

  1. java面向对象之 封装 Encapsulation

    什么是封装:对象中的成员该隐藏的隐藏.该公开的要公开 封装:顾名思义,隐藏对象的属性和实现细节,仅对外公开接口,控制在程序中属性的读和修改的访问级别:将抽象得到的数据和行为(或功能)相结合,形成一个有 ...

  2. Java基础-面向对象第一特性之封装(Encapsulation)

    Java基础-面向对象第一特性之封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.理解什么是面向过程和面向对象 面向过程与面向对象都是我们编程中 ...

  3. Java方法的封装

    类的封装性即不能让外面的类随意修改一个类的成员变量: 在定义一个类的成员(包括变量和方法),使用private关键字说明这个成员的访问权限,只能被这个类的其他成员方法调用,而不能被其他的类中的方法所调 ...

  4. java类的封装、继承、多态

    一.封装(encapsulation) 封装性就是把类(对象)的属性和行为结合成一个独立的相同单位,并尽可能隐蔽类(对象)的内部细节,对外形成一个边界,只保留有限的对外接口使之与外部发生联系.封装的特 ...

  5. Java基础04 封装与接口

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 总结之前的内容,对象(object)指代某一事物,类(class)指代象的类型.对 ...

  6. Java面向对象(封装性概论)

     Java面向对象(封装性概论) 知识概要:                   (1)面向对象概念 (2)类与对象的关系 (3)封装 (4)构造函数 (5)this关键字 (6)static关键 ...

  7. Java基础04 封装与接口(转载)

    数据成员和方法都是同时开放给内部和外部的.在对象内部,我们利用this来调用对象的数据成员和方法.在对象外部,比如当我们在另一个类中调用对象的时,可以使用 对象.数据成员 和 对象.方法() 来调用对 ...

  8. java之类的封装

    类和对象成员变量,成员函数特殊的成员变量和成员函数 函数重载 构造函数 静态变量 静态函数面向对象:封装 继承 多态封装 Encapsulation为什么需要封装?外界无法直接操作对象的具体的属性(安 ...

  9. Java基础之封装

    封装(Encapsulation)是java面向对象的三大特性,之前学java迷迷糊糊,一直也没弄清楚什么是封装以及为什么要封装,直到这次看书才有一种被点醒的感觉. java中的封装是针对某个类而言的 ...

  10. 面向对象第一个特征-封装(Encapsulation)

    面向对象第一个特征-封装(Encapsulation) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.封装概述(Encapsulation) 1>.什么是封装 是指隐藏对 ...

随机推荐

  1. safari 回调中window.open无法执行

    safari无法在callback中执行window.open,其安全机制将其阻挡了. 解决方法: var oWinRef = win.open('','_blank','参数');fCallback ...

  2. C++ security issue analyze

    https://sploitfun.wordpress.com/about-2/ “Happiness is only real when shared” – Into the wild http:/ ...

  3. Javabean+servlet+JSP(html)实例应用

    大家都知道Javabean+servlet+JSP是最简单的MVC模式.的确,在一个小型的项目中,这个模式完全够用. 它优雅并且简洁.加上jQueryui的完美展示效果,让这个模式看起来非常合适.当然 ...

  4. Apache ab参数--压力测试

    Apache附带的ab,它非常容易使用,ab可以直接在Web服务器本地发起测试请求.这至关重要,因为我们希望测试的服务器的处理时间,而不包含数据的网络传输时间以及用户PC本地的计算时间. 需要清楚的是 ...

  5. Error: [ng:areq] Argument 'xxxx' is not a function, got undefined

    "Error: [ng:areq] Argument 'keywords' is not a function, got undefined" 代码类似这样的: <div n ...

  6. Exception→"Source":"EntityFramework" "Message" :"更新条目时出错。有关详细信息,请参阅内部异常。"

    给一个数据库中类型为"datetime"的列赋值为 "DateTime.MinValue"...... 而// ::} But--01到9999-- :: 到 ...

  7. LYDSY模拟赛day3 序列

    NOIP不考可持久,弃坑

  8. jquery遍历

    http://www.cnblogs.com/tylerdonet/archive/2013/04/05/3000618.html jQuery 遍历函数 jQuery 遍历函数包括了用于筛选.查找和 ...

  9. 使用type="redirect"重定向,传递List等变量到jsp页面的问题

    Struts2在提交表单的时候,使用「type="redirect"」重定向到相应的jsp页面. Action中的List表单是无法传到相应的jsp页面. 我猜测是因为List作为 ...

  10. 修改dedecms默认文章来源 "未知"改为关键词

    在dedecms后台发表文章时文章来源是可选的,有时我们没有选择或没填写,那么前台默认文章来源即“未知”.如何将dedecms默认文章来源改为自己想要的关键词呢?即将“未知”改为“keyword”呢? ...