[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关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...
随机推荐
- C#文件相同性判断
在进行开发时,对文件进行上传和下载是较为普遍的行为,为了防止在文件操作过程中,出现同一文件多次操作,需要对文件进行相同性比较: 1.获取文件的绝对路径,针对window程序和web程序都可使用: // ...
- 模拟QQ聊天系统-安卓源代码
利用课余时间随便写的一个小东西,都是一起学习. 先上图: package com.example.nanchen.listviewdemo.adapter; import android.conten ...
- js基础篇——变量
a.变量类型 变量类型 构造函数 举例 类型检测typeof 字符串 function String() var t = "chua"; var m = new String(&q ...
- MySQL数据迁移到SQL Server
数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL ...
- springmvc处理上传图片代码(校验图片尺寸、图片大小)
package com.maizuo.web.controller; import com.maizuo.domain.Result; import com.maizuo.util.Constants ...
- js树形控件—zTree使用总结
0 zTree简介 树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 0.0 ...
- SQL 性能优化
当我看到sql执行很慢的时候就在想为什么这么慢? 不外乎数据大,sql语句复杂,没有索引. 如果要进行优化的话可以从对应的这三个问题出发: 看看表是否可以进行拆分成小表,拆分sql语句,建立适合的索引 ...
- 在c#中get同步访问http
参照文章:http://blog.csdn.net/qianmenfei/article/details/37974767 public static string SendMessage(strin ...
- OA项目——总结
先来张大致结构图: 项目链接:https://github.com/shuai7boy/YM_OA
- 【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)
原文链接:http://blog.csdn.net/ysydao/article/details/11002295 PHP 用pdo连接数据库时出现中文乱码问题解决办法 1.array(PDO::MY ...