原文地址:http://www.work100.net/training/java-encapsulation.html

更多教程:光束云 - 免费课程

封装

序号 文内章节 视频
1 概述 -
2 封装的优点 -
3 实现封装的步骤 -
4 实例 -

请参照如上章节导航进行阅读

1.概述

在面向对象程式设计方法中,封装(英语:Encapsulation)是指一种将抽象性函式接口的实现细节部份包装、隐藏起来的方法。

封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。

要访问该类的代码和数据,必须通过严格的接口控制。

封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。

适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。

2.封装的优点

  • 良好的封装能够减少耦合。
  • 类内部的结构可以自由修改。
  • 可以对成员变量进行更精确的控制。
  • 隐藏信息,实现细节。

3.实现封装的步骤

  • 修改属性的可见性来限制对属性的访问(一般限制为 private),例如:
public class Person {
private String name;
private int age;
}

这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

  • 对每个值属性提供对外的公共方法访问,也就是创建一对赋取值方法,用于对私有属性的访问,例如:
public class Person{
private String name;
private int age;
​
public int getAge(){
return age;
}
​
public String getName(){
return name;
}
​
public void setAge(int age){
this.age = age;
}
​
public void setName(String name){
this.name = name;
}
}

采用 this 关键字是为了解决实例变量( private String name )和局部变量( setName(String name) 中的 name 变量 )之间发生的同名的冲突。

4.实例

让我们来看一个 Java 封装类的例子:

/* 文件名: EncapTest.java */
public class EncapTest{ private String name;
private String idNum;
private int age; public int getAge(){
return age;
} public String getName(){
return name;
} public String getIdNum(){
return idNum;
} public void setAge( int newAge){
age = newAge;
} public void setName(String newName){
name = newName;
} public void setIdNum( String newId){
idNum = newId;
}
}

以上实例中 public 方法是外部类访问该类成员变量的入口。

通常情况下,这些方法被称为 getter 和 setter 方法。

因此,任何要访问类中私有成员变量的类都要通过这些 getter 和 setter 方法。

通过如下的例子说明 EncapTest 类的变量怎样被访问:

/* F文件名 : RunEncap.java */
public class RunEncap{
public static void main(String[] args){
EncapTest encap = new EncapTest();
encap.setName("James");
encap.setAge(20);
encap.setIdNum("12343ms"); System.out.print("Name : " + encap.getName()+
" Age : "+ encap.getAge());
}
}
Name : James Age : 20

上一篇:抽象类

下一篇:接口


如果对课程内容感兴趣,可以扫码关注我们的 公众号 或 QQ群,及时关注我们的课程更新


Java入门 - 面向对象 - 05.封装的更多相关文章

  1. JAVA入门 面向对象

    主要内容 1.类和对象的概念 2.什么是面向对象 3.什么对象的属性方法 4.何谓对象引用 5.实例化 类和对象的概念 万物皆对象,客观存在的事物皆为对象.我们大到名胜古迹,小道生活中的一件物品,例如 ...

  2. Java入门 面向对象第一天

    面向对象 人为抽象的一种编程模型,在理解面向对象的代码时要按照抽象的模型来理解,不能只从代码字面来理解复杂的问题,学会拆分成一个一个独立的小问题,通过解决每一个小问题,最后解决一个大问题 类 类是事物 ...

  3. 【Java】面向对象之封装

    面向对象编程是对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改.封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问.要访问该类的数据,必须通过指定的方式 ...

  4. Java入门 - 面向对象 - 04.抽象类

    原文地址:http://www.work100.net/training/java-abstract.html 更多教程:光束云 - 免费课程 抽象类 序号 文内章节 视频 1 概述 2 Java抽象 ...

  5. Java入门教程九(封装继承多态)

    封装 封装就是将对象的属性和方法相结合,通过方法将对象的属性和实现细节保护起来,实现对象的属性隐藏.做法就是:修改属性的可见性来限制对属性的访问,并为每个属性创建一对取值(getter)方法和赋值(s ...

  6. JAVA基础-面向对象05

    一.面向对象的引入 解决问题的时候,首先要会分析思路,这个思路就是我们生活中解决一个问题的方法步骤: 有了思路之后,再把思路使用java代码来解决: 但是 计算总分的需求变了 分析:原来在一个程序中, ...

  7. Java入门 - 面向对象 - 01.继承

    原文地址:http://www.work100.net/training/java-inheritance.html 更多教程:光束云 - 免费课程 继承 序号 文内章节 视频 1 概述 2 继承的特 ...

  8. Java入门 - 面向对象 - 02.重写与重载

    原文地址:http://www.work100.net/training/java-override-overload.html 更多教程:光束云 - 免费课程 重写与重载 序号 文内章节 视频 1 ...

  9. Java入门 - 面向对象 - 06.接口

    原文地址:http://www.work100.net/training/java-interface.html 更多教程:光束云 - 免费课程 接口 序号 文内章节 视频 1 概述 2 接口的声明 ...

随机推荐

  1. RabbitMQ-工作原理

    使用场景 在我们秒杀抢购商品的时候,系统会提醒我们稍等排队中,而不是像几年前一样页面卡死或报错给用户. 像这种排队结算就用到了消息队列机制,放入通道里面一个一个结算处理,而不是某个时间断突然涌入大批量 ...

  2. LightOJ - 1284 Lights inside 3D Grid (概率计算)

    题面: You are given a 3D grid, which has dimensions X, Y and Z. Each of the X x Y x Z cells contains a ...

  3. Tomcat 类加载器打破双亲委派模型

    我们分为4个部分来探讨: 1. 什么是类加载机制? 2. 什么是双亲委任模型? 3. 如何破坏双亲委任模型? 4. Tomcat 的类加载器是怎么设计的? 我想,在研究tomcat 类加载之前,我们复 ...

  4. 举例理解Hibernate的三种状态(转)

    转自:https://blog.csdn.net/yiguang_820/article/details/79073152 初学Hibernate,了解到Hibernate有三种状态:transien ...

  5. unsupported jsonb version number 123

    PostgreSQL  jsonb 入库时遇到   unsupported jsonb version number 123 变通方法 insert into  htclanedata (laneda ...

  6. net core WebApi——依赖注入Autofac

    目录 前言 Autofac 添加一个Util来随时调用 小结 代码地址 前言 周末加班,下午犯困,整理下之前鼓捣过的东西,看过我之前的webapi系列的读者知道,我之前试过Aspect,但是升级到3. ...

  7. 《HelloGitHub》第 45 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  8. 使用element的upload组件实现一个完整的文件上传功能(上)

    说到标题就有点心塞了,前段时间项目上需要实现一个文件上传的功能,然后就咔咔的去用了element的upload组件,不用不知道一用吓一跳哇. 在使用的过程中遇到了很多让意想不到的问题,后来也因为时间问 ...

  9. NFS服务介绍及实验

    一.什么是NFS NFS 是 Network File System 的缩写,即网络文件系统.一种使用于分散式文件系统的协定,由 Sun 公司开发,于 1984 年向外公布.功能是通过网络让不同的机器 ...

  10. $loj$10222 佳佳的$Fibonacci$ 矩阵快速幂

    正解:矩阵快速幂 解题报告: 我永远喜欢loj! 一看到这个就应该能想到矩阵快速幂? 然后就考虑转移式,发现好像直接想不好想,,,主要的问题在于这个*$i$,就很不好搞$QAQ$ 其实不难想到,$\s ...