zoukankan      html  css  js  c++  java
  • 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种权限修饰符来修饰类及类的内部结构,体现类及类的内部结构在被调用时的可见性的大小。

     

  • 相关阅读:
    [Next] 六.next的优化
    [Next] 五.next自定义内容
    Mac解决端口占用
    [Next] 四.在next中引入redux
    [Next] 服务端渲染知识补充
    [Next] 三.next自定义服务器和路由
    哪些使用UDP、TCP、IP协议
    IDEA配置git
    ssm整合配置
    git传输远程仓库
  • 原文地址:https://www.cnblogs.com/niujifei/p/13770565.html
Copyright © 2011-2022 走看看