了解封装

什么是封装?

在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. CSS3知识点整理&&一些demo

    css3能做什么 响应式开发的基础,然后能实现一些酷炫的效果咯. 以下案例纯css3实现,一点都没用js (入门简单,但是水很深) 叮当猫纯用css3做出         http://codepen ...

  2. PHP中的__toString方法(实现JS里的链式操作)

    _toString方法是在打印对象时自动调用的魔术方法,如果不声明会报以下错 Catchable fatal error: Object of class String could not be co ...

  3. 5.Struts.xml标签中的一些小技巧

    1.为Action属性注入值如给actions包下的test.java类中变量username赋值为"xingyun"在struts.xml中添加下面这段代码: <strut ...

  4. WebApp上滑加载数据...

    $(window).bind("scroll", function () { if ($(document).scrollTop() + $(window).height() &g ...

  5. MyBatis入门基础(一)

    一:对原生态JDBC问题的总结 新项目要使用mybatis作为持久层框架,由于本人之前一直使用的Hibernate,对mybatis的用法实在欠缺,最近几天计划把mybatis学习一哈,特将学习笔记记 ...

  6. jQuery Mobile案例,最近用Moon.Web和Moon.Orm做了一套系统

      一.简介 先说说,我们的主题.jQuery Mobile,最近用Moon.Web和Moon.Orm做了一套系统 jQuery Mobile是jQuery 在手机上和平板设备上的版本.jQuery ...

  7. 我的微软MVP申请历程

    10月10日晚更新: 今天看到这篇博客好多朋友点了推荐上了博客园首页最多推荐,很开心,感谢大家的鼓励! 张善友大哥也写过一篇文章: 10年微软MVP路(如何成为一个MVP?) 写的更为详细,大家也可以 ...

  8. C# MVC绑定 List<DapperRow>到bootstrap-table列表

    1.Dapper返回List<dynamic>对象 /// <summary> /// 获取候选人推荐的分页数据 /// </summary> /// <pa ...

  9. 转载:《TypeScript 中文入门教程》 11、声明合并

    版权 文章转载自:https://github.com/zhongsp 建议您直接跳转到上面的网址查看最新版本. 介绍 TypeScript有一些独特的概念,有的是因为我们需要描述JavaScript ...

  10. Spring学习系列(二) 自动化装配Bean

    一.Spring装配-自动化装配 @Component和@ComponentScan 通过spring注解(@Component)来表明该类会作为组件类,并告知Spring要为这类创建bean,不过组 ...