封装的概述及好处

封装概述:

封装是指隐藏对象的属性和实现细节,仅对外提供公共访问方式

这是什么意思呢?

简单的来说就是我将不想给别人看的数据,以及别人无需知道的内部细节, “锁起来” ,我们只留下一些入口,使其与外部发生联系。

我们如何给我们的数据 “上锁” 呢?

我们使用,public、private、protected 等权限修饰符 在类的内部设定了边界,这些不同程度的 ”锁“ 决定了紧跟其后被定义的东西能够被谁使用。

封装的好处:

· 隐藏实现细节,提供公共的访问方式

· 提高了代码的复用性

· 提高安全性

封装好处的体现方式:

(一)隐藏实现细节,提供公共的访问方式

隐藏实现细节怎么理解呢?

我们将一些功能封装到类中,而客户端的程序员,不需要知道类中的这个方法的逻辑原理,类程序员只需要给他一个对外的接口,客户端程序员只需要能够调用这个方法即可,

例如:夏天宿舍很热,我们(用户)只需要操作遥控器即可使用空调,并不需要了解空调内部是如何运行的

提供公共的访问方式又怎么理解呢?

我们先来看一段标准案例

  public class Student {      //定义成私有成员变量(private)      private String name;      private int age;

      //无参构造      public Student() {          super();      }  ?      //带参构造      public Student(String name, int age) {          super();          this.name = name;          this.age = age;      }

      //成员变量的set和get方法(与外界联系的桥梁)      public void setName(String name) {          this.name = name;      }  ?      public String getName() {          return name;      }  ?      public void setAge(int age) {          this.age = age;      }  ?      public int getAge() {          return age;      }  }
  public class StudentDemo {      public static void main(String[] args) {          //创建学生类对象 s          Student s = new Student();                        //对象s调用类中的公共方法setName()和setAge()          //set方法给成员变量赋值          s.setName("BWH_Steven");          s.setAge(20);                    //get方法获取成员变量          System.out.println(s.getName() + s.getAge());      }  }

我们可以看到在上面的案例中,成员变量都使用private修饰,而下面的get和set方法均使用了public修饰,其实被private修饰的属性就是我们想要锁起来的数据,而set、get方法就是我们打开这把锁的钥匙

被private所修饰的内容是,除类型创建者和类型的内部方法之外的任何人都不能访问的元素,所以我们这些数据就被我们通过private “锁” 了起来,而我们外界是可以通过创建对象来调用一个类中的公共方法的,所以被public修饰的 set和get方法外界所能访问的,而这两个方法又可以直接访问我们的私有成员变量,所以set和get方法就成为了私有成员与外界沟通的钥匙。

(二)提高了代码的复用性

功能被封装成了类,通过基类与派生类之间的一些机制(组合和继承),来提高代码的复用性

Ps:关于代码复用问题,我会专篇讲解,今天还是着重讲解封装带来的主要好处

(三)提高安全性

看完上面的代码,可能大家会有一点疑惑,这些属性、方法封装后我都还可以看得到,这哪里体现了安全呢?大家来一起看一看我们下面这个改进版的案例

  public class Student {  ?      private String name;      private int age;  ?      public Student() {          super();      }  ?      public Student(String name, int age) {          super();          this.name = name;          this.age = age;      }  ?      public void setName(String name) {          this.name = name;      }  ?      public String getName() {          return name;      }  ?      //在setAge()方法中加入了校验的内容      //不合法数据是不允许传递给成员变量的      public void setAge(int age) {          if (age < 0 || age > 120) {              System.out.println("Error");          }else {              this.age = age;          }           }  ?      public int getAge() {          return age;      }  }  ?
  public class StudentDemo {      public static void main(String[] args) {          Student s = new Student();          System.out.println(s.getName() + s.getAge());                    //错误的方式!!!          s.name = "BWH_Steven";          s.age = 20;          System.out.println(s.getName() + s.getAge());                    //正确的方式!!!          s.setName("BWH_Steven");          s.setAge(20);      }  }  ?

我们用private来修饰我们的成员变量不是没有任何依据的,如果我们的成员变量修饰符改为public,这句意味着外界可以使用对象直接访问,修改这个成员变量,这可能会造成一些重大的问题

例如:外界通过对象去给成员变量赋值,可以赋值一些非法的数据

这明显是不合理的。所以在赋值之前应该先对数据进行判断

StudenDemo是一个测试类,测试类一般只创建对象,调用方法

所以这个判断应该定义在Student类中。需要使用逻辑语句

逻辑语句应该定义在方法中。所以在Student类中提供一个方法来对数据进行校验

但是如果偏偏不调用方法来赋值,还是直接赋值,这样我们的方法就没有起作用

所以我们必须强制要求使用我的方法,而不能直接调用成员变量

这也正是我们使用private修饰成员变量的原因!

结尾:

如果内容中有什么不足,或者错误的地方,欢迎大家给我留言提出意见, 蟹蟹大家 !^_^

如果能帮到你的话,那就来关注我吧!

在这里的我们素不相识,却都在为了自己的梦而努力 ?

一个坚持推送原创Java技术的公众号:理想二旬不止

原文地址:https://www.cnblogs.com/ideal-20/p/10932252.html

时间: 2024-08-01 10:43:00

封装的概述及好处的相关文章

封装,继承,多态,接口

封装 封装的概述和好处: 是面向对象三大特征之一 是面向对象编程语言对客观世界的模拟,客观世界里成员变量都是隐藏在对象内部的,外界无法直接操作和修改. 封装原则: 将不需要对外提供的内容都隐藏起来. 把属性隐藏,提供公共方法对其访问. 成员变量private,提供对应的getXxx()/setXxx()方法 好处: 通过方法来控制成员变量的操作,提高了代码的安全性 把代码用方法进行封装,提高了代码的复用性 public class Student { String name; //int age

Java学习周记week02

1.面向对象的思想 面向对象是基于面向过程的编程思想. 面向过程:强调的是每一个功能的步骤 面向对象:强调的是对象,然后由对象去调用功能 特点 是一种更符合我们思考习惯的思想 可以将复杂的事情简单化 将我们从执行者变成了指挥者 角色发生了转换 定义一个学生类 1 public class Student { 2 //成员变量 3 //姓名 4 String name; 5 //年龄 6 int age; 7 8 //成员方法 9 //学习的方法 10 public void study() {

06 面向对象思想概述

06.01_面向对象(面向对象思想概述)(了解) A:面向过程思想概述 第一步 第二步 B:面向对象思想概述 找对象(第一步,第二步) C:举例 买煎饼果子 洗衣服 D:面向对象思想特点 a:是一种更符合我们思想习惯的思想(懒人思想,我把事情自己不做,交给别人去做) b:可以将复杂的事情简单化(对使用者来说简单了,对象里面还是很复杂的) c:将我们从执行者变成了指挥者 角色发生了转换 E:面向对象开发 就是不断的创建对象,使用对象,指挥对象做事情.(如果有对象,直接用对象,对我们直接提供服务)

06.01_面向对象(面向对象思想概述)

###06.01_面向对象(面向对象思想概述)(了解)* A:面向过程思想概述 * 第一步 * 第二步 * B:面向对象思想概述 * 找对象(第一步,第二步) * C:举例 * 买煎饼果子 * 洗衣服 * D:面向对象思想特点 * a:是一种更符合我们思想习惯的思想 * b:可以将复杂的事情简单化 * c:将我们从执行者变成了指挥者 * 角色发生了转换* E:面向对象开发 * 就是不断的创建对象,使用对象,指挥对象做事情.* F:面向对象设计 * 其实就是在管理和维护对象之间的关系.* G:面向

面向对象的三大基石(封装,继承和复合,多态)

转自 面向对象的三大基石面向对象的三大基石(封装,继承和复合,多态) 三大基石之一 封装 1.什么是封装? 封装(encapsulation)又叫隐藏实现(Hiding the implementation).就是只公开代码单元的对外接口,而隐藏其具体实现. 比如你的手机,手机的键盘,屏幕,听筒等,就是其对外接口.你只需要知道如何按键就可以使用手机,而不需要了解手机内部的电路是如何工作的.封装机制就像手机一样只将对外接口暴露,而不需要用户去了解其内部实现.细心观察,现实中很多东西都具有这样的特点

封装方法或者属性

百科:封装:指隐藏对象的属性和实现细节,仅对外提供公共访问方式:比如电脑机箱.笔记本等 好处: 将变化隔离: 方便使用: 提高复用性: 提高安全性(防止被随意修改) 一次封装,可以无限调用,并且对属性可以限定关键字private:封装在代码中的体现 (1)私有的意思,权限修饰符 (2)用来修饰成员变量和成员函数 (3)用private修饰的成员只在本类中有效,本类成员可以直接调用private属性 (4)私有是封装的一种体现 将基本数据类型封装成对象的好处在于可以在对象中定义更多的功能操作该数据

[Java入门笔记] 面向对象三大特征之:封装

了解封装 什么是封装? 在Java的面向对象程序设计中,有三大基本特征:封装.继承和多态.首先我们先来看看封装: 在Java的面对对象程序设计中,封装(Encapsulation)是指一种将函数功能实作细节部份包装.隐藏起来的方法.封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随便访问.如果要访问类中的代码和数据,必须要通过严格的控制. 为什么要使用封装? 使用封装主要有以下好处: 能够隐藏该类中一些功能的实现细节.让调用者通过事先实现好的方法访问类的功能和数据,同时也限制

(转)面向对象的三大基石(封装,继承和复合,多态)

三大基石之一 封装 1.什么是封装? 封装(encapsulation)又叫隐藏实现(Hiding the implementation).就是只公开代码单元的对外接口,而隐藏其具体实现. 比如你的手机,手机的键盘,屏幕,听筒等,就是其对外接口.你只需要知道如何按键就可以使用手机,而不需要了解手机内部的电路是如何工作的.封装机制就像手机一样只将对外接口暴露,而不需要用户去了解其内部实现.细心观察,现实中很多东西都具有这样的特点. 2.如何实现封装?            在程序设计里,封装往往是

Python学习(七)面向对象 ——封装

Python 类的封装 承接上一节,学了Student类的定义及实例化,每个实例都拥有各自的name和score.现在若需要打印一个学生的成绩,就可定义函数 print_score() 该函数为类外的函数,如下: 1 class Student: 2 def __init__(self, name, score): 3 self.name = name 4 self.score = score 5 6 May = Student("May",90) # 实例化 7 Peter = St