[Java入门笔记] 面向对象三大特征之:封装
了解封装
什么是封装?
在Java的面向对象程序设计中,有三大基本特征:封装、继承和多态。首先我们先来看看封装:
在Java的面对对象程序设计中,封装(Encapsulation)是指一种将函数功能实作细节部份包装、隐藏起来的方法。封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随便访问。如果要访问类中的代码和数据,必须要通过严格的控制。
为什么要使用封装?
使用封装主要有以下好处:
- 能够隐藏该类中一些功能的实现细节。让调用者通过事先实现好的方法访问类的功能和数据,同时也限制对类中数据的不合理访问。
- 对数据进行检查,有利于保护对象信息的完整和合理性。
- 便于对代码的修改和维护,提高代码的可维护性。
如何使用封装?
访问权限控制符
Java中一共有四个访问权限控制符,用来对类和对象的数据进行封装:
| 修饰符 | 类内部 | 同一个包 | 子类真 | 全局范围 |
| private | √ | |||
| default | √ | √ | ||
| protected | √ | √ | √ | |
| public | √ | √ | √ | √ |
对于外部类,也可以使用修饰符,不过外部类只能使用public和默认两种修饰符。
例子
public class Person {
//用private修饰符修饰,外部无法访问
private String name; //姓名
private int age; //年龄
private String idNum; //身份证号
//得到该类对象的姓名
public String getName() {
return name;
}
//设置该类的对象的姓名,如果传入空值,则不赋值
public void setName(String name) {
if(name.length() == 0 || name == null){
return;
}
this.name = name;
}
//得到年龄
public int getAge() {
return age;
}
//设置年龄,当传入的参数大于等于0时,才将参数设置给该对象
public void setAge(int age) {
if(age >= 0){
this.age = age;
}
}
//得到身份证号
public String getIdNum() {
return idNum;
}
//设置身份证号
public void setIdNum(String idNum) {
this.idNum = idNum;
}
}
上面的例子中我们为该类中的属性增加了private修饰符,外部无法再直接访问和修改这些属性,如果有需要使用,我们则需要为其增加getXxx和setXxx方法访问这些事项,同时,我们也可以在这些方法中对这些属性的访问进行控制,比如姓名不能为空,年龄不能为负数等等。
这样我们并可见对程序的完整性和合理性进行合理的控制,也能更好的增强代码的安全性,也使代码能够更好的管理与维护。
public class Test {
public static void main(String[] args) {
Person p = new Person();
p.name = "张三"; //错误,无法直接访问
p.setName("张三");
p.setAge(-5);
System.out.println(p.getAge()); //输出默认值0,尽管我们在上一行代码中传入一个数值,但是我们在setAge方法中做了控制,所以传入的负数并没有赋给p对象
}
}
使用原则
关于访问控制符的使用,我们使用应当尽量符合下面一些原则:
- 类的大部分成员变量,都应该使用private修饰符,只有一些static、全局变量的Field,才考虑使用public修饰符。
- 如果某个类主要用作其他类的父类,类中的大部分方法和属性希望被子类重写和使用,而又不想被外部直接调用,则应当使用protected修饰符。
- 希望被暴露出来直接被外部使用的方法,应当使用public修饰符。
- 一个方法的功能只有在类的内部被调用时,应当使用private修饰符。
[Java入门笔记] 面向对象三大特征之:封装的更多相关文章
- [Java入门笔记] 面向对象三大特征之:继承
理解什么是继承 首先我们知道,面对对象有三大特征: 封装:解决了数据的安全性问题 继承:解决了代码的重用问题 多态:解决了程序的扩展问题 上一篇博客中,我们了解了一下封装,现在我了再来看看什么是继承. ...
- [Java入门笔记] 面向对象编程基础(二):方法详解
什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...
- Java学习:面向对象三大特征:封装、继承、多态之封装性
面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...
- Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。
面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...
- [Java入门笔记] 面向对象编程基础(一):类和对象
什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...
- [Java入门笔记] 面向对象编程基础(三):成员变量和局部变量
在类中,变量根据定义的位置不同,可以分为成员变量和局部变量.
- 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用
垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...
- 0028 Java学习笔记-面向对象-Lambda表达式
匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...
- 0025 Java学习笔记-面向对象-final修饰符、不可变类
final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
随机推荐
- 初次体验百度eCharts遇到的问题和解决方法
前言 上周在厌烦Highchart下,体验了下百度的eCharts,支持IE6.7.8+外,对数据在线编辑还有工具栏支持,体验时遇到了几个小问题,最近两天在尝试得到了一个解决方法. Tooltip时单 ...
- CSS魔法堂:重拾Border之——解构Border
前言 当CSS3推出border-radius属性时我们是那么欣喜若狂啊,一想到终于不用再添加额外元素来模拟圆角了,但发现border-radius还分水平半径和垂直半径,然后又发现border-t ...
- 如何设计一个优秀的API(转载)
最近在整理框架的一些 API,觉得很有必要总结一下 API 兼容性的设计.下图是我自己当下的一些总结,慢慢维护: 网上搜索了一下,一个多月前,“标点符”已经发布了下面这篇文章,觉得写得非常不错,转载于 ...
- Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航
在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类Ap ...
- python中global 和 nonlocal 的作用域
python引用变量的顺序: 当前作用域局部变量->外层作用域变量->当前模块中的全局变量->python内置变量 . 一 global global关键字用来在函数或其他局部作用域 ...
- 第 31 章 项目实战-PC端固定布局[2]
学习要点: 1.大纲算法 2.section和div 3.结构分析 主讲教师:李炎恢 本章主要开始使用学习用HTML5和CSS3来构建Web页面,第一个项目采用PC端 固定布局来实现. 一.大纲算法 ...
- 【Python大系】Python快速教程
感谢原作者:Vamei 出处:http://www.cnblogs.com/vamei 怎么能快速地掌握Python?这是和朋友闲聊时谈起的问题. Python包含的内容很多,加上各种标准库.拓展库, ...
- git的诞生
Git的诞生 很多人都知道,Linus在1991年创建了开源的Linux,从此,Linux系统不断发展,已经成为最大的服务器系统软件了. Linus虽然创建了Linux,但Linux的壮大是靠全世 ...
- OData V4 系列 查询操作
OData 学习目录 对OData的操作,主要是查询,下面把相关的查询情况列出来,供参考学习,每个操作都有对应的截图,便于理解 默认查询 $expand 查询导航属性关系 ,查询Product相关的 ...
- ajax大全
简介 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 传统的web应用简单的操作需要加载全局 ...