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

大白话定义:通过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. ReSharper 配置及用法(转)

    1:安装后,Resharper会用他自己的英文智能提示,替换掉 vs2010的智能提示,所以我们要换回到vs2010的智能提示 2:快捷键.是使用vs2010的快捷键还是使用 Resharper的快捷 ...

  2. PasswordHasher

    namespace Microsoft.AspNet.Identity { public class PasswordHasher : IPasswordHasher { public virtual ...

  3. GoLang之基础

    GoLang之基础 Go是一种并发的.带垃圾回收的.快速编译的语言. 经典的"hello world"入门: package main import "fmt" ...

  4. mysql 索引及其原理

    mysql 索引 KEY与INDEX的区别: KEY is something on the logical level, describes your table and database desi ...

  5. org.hibernate.QueryException: could not resolve property

    org.hibernate.QueryException: could not resolve property HibernateSQLXML  org.hibernate.QueryExcepti ...

  6. ng指令之 ng-class 篇

    1>定义和用法 ng-class 指令用于给 HTML 元素动态绑定一个或多个 CSS 类.ng-class 指令的值可以是字符串,对象,或一个数组. 如果是字符串,多个类名使用空格分隔. 如果 ...

  7. linq/EF/lambda 比较字符串日期时间大小

    在使用EF时,想要比较字符串类型的日期时,参考以下: SQL语句: 1 2 3 4 1)select * from TableName where StartTime > '2015-04-08 ...

  8. 关于动态URL地址设置静态形式

    动态URL地址:http://station.com/index.php?c=play&a=index&id=12345 静态URL地址:http://station.com/play ...

  9. matplotlib basic and boxplot

    ============================================matplotlib 绘图基础========================================= ...

  10. 遍历一个类的属性--并转换为Dictionary类型

    参考地址...http://www.cnblogs.com/xwgli/p/3306297.html 记录点滴...以前很少用泛型...HaHa... /// <summary> /// ...