了解封装

什么是封装?

在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入门笔记] 面向对象三大特征之:封装的更多相关文章

  1. [Java入门笔记] 面向对象三大特征之:继承

    理解什么是继承 首先我们知道,面对对象有三大特征: 封装:解决了数据的安全性问题 继承:解决了代码的重用问题 多态:解决了程序的扩展问题 上一篇博客中,我们了解了一下封装,现在我了再来看看什么是继承. ...

  2. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  3. Java学习:面向对象三大特征:封装、继承、多态之封装性

    面向对象三大特征:封装.继承.多态. 封装性在Java当中的体现: 方法就是一种封装 关键字private也是一种封装 封装就是将一些细节信息隐藏起来,对于外界不可见. 问题描述:定义Person的年 ...

  4. Java学习:面向对象三大特征:封装性、继承性、多态性之多态性。

    面向对象三大特征:封装性.继承性.多态性之多态性. extends继承或者implemens实现,是多态性的前提. 例如:小菜是一个学生,但同时也是一个人.小菜是一个对象,这个对象既有学生形态,也有人 ...

  5. [Java入门笔记] 面向对象编程基础(一):类和对象

    什么是面向对象编程? 我们先来看看几个概念: 面向过程程序设计 面向过程,是根据事情发展的步骤,按进行的顺序过程划分,面向过程其实是最为实际的一种思考方式,可以说面向过程是一种基础的方法,它考虑的是实 ...

  6. [Java入门笔记] 面向对象编程基础(三):成员变量和局部变量

    在类中,变量根据定义的位置不同,可以分为成员变量和局部变量.

  7. 0030 Java学习笔记-面向对象-垃圾回收、(强、软、弱、虚)引用

    垃圾回收特点 垃圾:程序运行过程中,会为对象.数组等分配内存,运行过程中或结束后,这些对象可能就没用了,没有变量再指向它们,这时候,它们就成了垃圾,等着垃圾回收程序的回收再利用 Java的垃圾回收机制 ...

  8. 0028 Java学习笔记-面向对象-Lambda表达式

    匿名内部类与Lambda表达式示例 下面代码来源于:0027 Java学习笔记-面向对象-(非静态.静态.局部.匿名)内部类 package testpack; public class Test1{ ...

  9. 0025 Java学习笔记-面向对象-final修饰符、不可变类

    final关键字可以用于何处 修饰类:该类不可被继承 修饰变量:该变量一经初始化就不能被重新赋值,即使该值跟初始化的值相同或者指向同一个对象,也不可以 类变量: 实例变量: 形参: 注意可以修饰形参 ...

随机推荐

  1. C#文件相同性判断

    在进行开发时,对文件进行上传和下载是较为普遍的行为,为了防止在文件操作过程中,出现同一文件多次操作,需要对文件进行相同性比较: 1.获取文件的绝对路径,针对window程序和web程序都可使用: // ...

  2. 模拟QQ聊天系统-安卓源代码

    利用课余时间随便写的一个小东西,都是一起学习. 先上图: package com.example.nanchen.listviewdemo.adapter; import android.conten ...

  3. js基础篇——变量

    a.变量类型 变量类型 构造函数 举例 类型检测typeof 字符串 function String() var t = "chua"; var m = new String(&q ...

  4. MySQL数据迁移到SQL Server

    数据迁移的工具有很多,基本SSMA团队已经考虑到其他数据库到SQL Server迁移的需求了,所以已经开发了相关的迁移工具来支持. 此博客主要介绍MySQL到SQL Server数据迁移的工具:SQL ...

  5. springmvc处理上传图片代码(校验图片尺寸、图片大小)

    package com.maizuo.web.controller; import com.maizuo.domain.Result; import com.maizuo.util.Constants ...

  6. js树形控件—zTree使用总结

    0 zTree简介 树形控件的使用是应用开发过程中必不可少的.zTree 是一个依靠 jQuery 实现的多功能 “树插件”.优异的性能.灵活的配置.多种功能的组合是 zTree 最大优点. 0.0 ...

  7. SQL 性能优化

    当我看到sql执行很慢的时候就在想为什么这么慢? 不外乎数据大,sql语句复杂,没有索引. 如果要进行优化的话可以从对应的这三个问题出发: 看看表是否可以进行拆分成小表,拆分sql语句,建立适合的索引 ...

  8. 在c#中get同步访问http

    参照文章:http://blog.csdn.net/qianmenfei/article/details/37974767 public static string SendMessage(strin ...

  9. OA项目——总结

    先来张大致结构图: 项目链接:https://github.com/shuai7boy/YM_OA

  10. 【转】php pdo连接数据库 解决中文乱码问题(wordpress mysql 问号?? ??)

    原文链接:http://blog.csdn.net/ysydao/article/details/11002295 PHP 用pdo连接数据库时出现中文乱码问题解决办法 1.array(PDO::MY ...