面向对象特征一:封装

简介: 面向对象特征一:封装

首先说一下面向对象的三大特征:封装、继承、多态。

先来说一下封装,我们在生活中,假如要开车,只需要按照一定的程序操作即可,不需要了解车的内部到底是如何运行的,在程序中也是一样。
我们在写程序的时候要遵循的一个原则是:高内聚,低耦合。

高内聚:就是把内部操作细节自己完成,不需要对外暴露。

低耦合:仅对外暴露部分方法用于使用
隐藏对象内部的复杂性,只对外暴露简单的接口用于使用。从而提高系统的可扩展性课维护性。这就是封装。

通俗的说,把该隐藏的隐藏起来,该暴露 的暴露出来。这就是封装性的设计思想。

为什么要用到封装?

我们来从专业的角度分析以下为什么要用到封装。

如果我们对类内部的所有成员,都设置为公共的,那么我们的程序将会有安全性问题,也会在调用时产生混乱。
所以,我们要把类内部的属性封装起来,只供类内部自己调用,对外提供相应的getXxx()和setXxx()方法,用于对该属性操作,从而避免上述问题

封装的好处:

  • 使用者只能通过事先定制好的方法来访问数据,可以方便地加入控制逻辑, 限制对属性的不合理操作;
  • 便于修改,增强代码的可维护性;

权限修饰符

封装,我们都会用到权限修饰符。Java提供了这几种修饰符:public、缺省、protected、private

这四种权限修饰符的权限如下图所示


以上四种修饰符的用法就是在定义成员的时候在定义关键字前面加。

像是

public static void main(String[] args)
private int age;

但是对于class的权限修饰,只能用public和default(缺省)。

public可以任意的访问(去掉’)

缺省只能在类的内部访问
我们下面看一下用来封装性的代码是什么样子的:

//创建一个类
class Person{
  //创建两个权限为私有的属性
  private int age;
  private String name;
  //提供两个get、set方法对以上两个属性进行操作
  public int getAge(){
    return age;
  }
  public void setAge(int age){
    this.age = age;
  }
  public String getName(){
    return name;
  }
  public void setAge(String name){
    this.name = name;
  }
  //在需要调用的地方创建类的对象
  //然后调用类的方法来进行对属性进行操作即可
}
相关文章
|
JavaScript 前端开发 API
javaScript中常用的String方法以及注意点总结
本文总结了JavaScript中常用的String对象的方法及其注意事项,包括大小写转换、字符获取、子字符串截取、字符串拼接、去除空格、替换、分割以及查找字符串中字符的索引等操作。提供了每种方法的使用示例代码,帮助理解它们的具体用法和差异。
215 2
|
Kubernetes 安全 数据安全/隐私保护
在k8S中,如何保证集群的安全性?
在k8S中,如何保证集群的安全性?
|
C++ Python
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
python类方法中使用:修饰符@staticmethod和@classmethod的作用与区别,还有装饰器@property的使用
546 1
|
设计模式 Java 容器
聊聊Java设计模式-访问者模式
访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。
139 3
聊聊Java设计模式-访问者模式
|
存储 缓存 算法
从小白开始刷算法 记忆化搜索篇 leetcode.509
从小白开始刷算法 记忆化搜索篇 leetcode.509
153 0
|
存储 SQL 人工智能
3.基于 DataWorks 的大数据&AI解决方案|学习笔记
快速学习3.基于 DataWorks 的大数据&AI解决方案
3.基于 DataWorks 的大数据&AI解决方案|学习笔记
「镁客早报」苹果将在德国停售iPhone 7&8;“刘强东事件”正式结案
受影响的 iPhone主要是采用了Intel和Qorvo(美国的一家射频IC厂商)的芯片。
714 0
|
Linux 虚拟化 Windows
磁盘管理 之 parted命令添加swap,文件系统
第1章 磁盘管理 1.1 必须要了解的。 1.1.1 ps aux 命令中 RSS 与VSZ的含义 rss 进程占用的物理内存的大小 单位:kb ;    vsz 进程占用的虚拟的内存大小(物理内存+swap) 1.
1583 0