Java 面向对象(五)面向对象特征之一:封装性(封装与隐藏)

一、封装性的引入

  1、高内聚,低耦合

    高内聚:类的内部数据操作细节自己完成,不允许外部干涉;

    低耦合:仅对外暴露少量的方法用于使用。

  2、封装性的设计思想

    隐藏对象内部的复杂性,只对外公开简单的接口。便于外界调用,从而提高系统的可扩展性、可维护性。通俗的说把该隐藏的隐藏起来,该暴露的暴露出来。 这就是封装性的设计思想。 

    封装可以被认为是一个保护屏障,防止该类的代码和数据被其他类随意访问。要访问该类的数据,必须通过指定的方式。适当的封装可以让代码更容易理解与维护,也加强了代码的安全性。 

  3、问题的引入

    当我们创建一个类的对象以后,我们可以通过"对象.属性"的方式,对对象的属性进行赋值。这里,赋值操作要受到属性的数据类型和存储范围的制约。除此之外,没有其他制约条件。但是,在实际问题中,我们往往需要给属性赋值加入额外的限制条件。这个条件就不能在属性声明时体现,我们只能通过方法进行限制条件的添加。(比如:年龄属性不能为负数等问题)

    同时,我们需要避免用户再使用"对象.属性"的方式对属性进行赋值。则需要将属性声明为私有的(private)。

    至此,针对于属性就体现了封装性。

    

二、封装性的体现(Encapsulation)

  1、信息的封装和隐藏

    Java 中通过数据声明为私有的(private),再提供公共的(public)方法:getXxx()和 setXxx() 实现对该属性的操作,以实现下述目的:

    (1)隐藏一个类中不需要对外提供的实现细节;

    (2)使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑,限制对属性的不合理操作;

    (3)便于修改,增强代码的可维护性;

  2、Demo

 1 public class Zoo {
 2     public static void main(String[] args) {
 3         Animal animal = new Animal();
 4         animal.setLegs(4);   // animal.setLegs(-100);
 5         //animal.legs = -100;  //非法的,The field Animal.legs is not visible
 6         System.out.println(animal.getLegs());
 7     }
 8 }
 9 
10 class Animal {
11     private int legs; //将属性legs定义为private,只能被Animal类内部访问
12     public void setLegs(int i) {
13         if (i != 0 && i != 2 && i != 4) {
14             System.out.println("Wrong number of legs");
15             return;
16         }
17         legs = i;
18     }
19     
20     public int getLegs() {
21         return legs;
22     }
23 }  

  注意

    对于 Getter 来说,不能有参数,返回值类型和成员变量对应。

         对于 Setter 来说,不能有返回值,参数类型和成员变量对应。

  3、封装性的体现

    对封装性的体现不仅表现在上面的私有的 成员变量,还包括不对外暴露的私有的方法,私有的构造方法等。

三、四种访问权限修饰符

  1、四种访问权限修饰符

    Java权限修饰符publicprotected(缺省)private置于类的成员定义前,用来限定对象对该类成员的访问权限。

    

    对于 class 的权限修饰符只可以用 public 和 default (缺省)

    public 类可以在任意地方被访问。

    default 类只可以被同一个包内部的类访问。

    

  2、封装性的体现,需要权限修饰符来配合

    (1)Java 规定的4中权限(从小到大排列):private、缺省、protected 、public 

    (2)4种权限可以用来修饰类及类的内部结构:属性、方法、构造器、内部类;

    (3)具体的,4种权限都可以用来修饰类的内部结构:属性、方法、构造器、内部类;

    (4)修饰类的话,只能使用:缺省、public;

  总结封装性:Java提供了4种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。

 

原文地址:https://www.cnblogs.com/niujifei/p/13770565.html