当前位置: 首页 > news >正文

【Java面向对象】封装的认识与实现

文章目录

  • 封装的初步认识
    • Q:什么是封装
    • Q:封装有什么好处
    • Q:如何实现封装
  • 封装的实现过程
  • 封装的演示
    • 详细代码
    • 效果演示

封装的初步认识

Q:什么是封装


A: 封装(Encapsulation)就是把抽象出来的数据(属性)和对数据的处理方式封装在一起。封装可以被认为是一个保护屏障,可以把数据保存在内部,要访问里面的代码和数据,必须通过严格的接口控制。


Q:封装有什么好处


A:
1)封装可以隐藏实现的细节。
2)封装可以提高代码的安全性和复用性。
3)封装类内部实现可以任意修改,不影响其他类。


Q:如何实现封装


A:封装实现三步法
第一步: 创建类,将属性进行私有化(一般限制为private),也就是不能直接修改属性。
第二步: 提供一个公共的(pubilc)set方法,用于对属性判断并赋值。
第三步: 提供一个公共的(pubilc)get方法,用于获取属性的值。

封装的实现过程

我们通过一个案例来了解封装,试一试实现封装:


第一步: 创建类,将属性进行私有化。
我们创建一个类 Person,在类中有一个私有化的年龄属性。

class Person {
   private int age;//年龄
}

第二步: 提供一个公共的(pubilc)set方法,用于对属性判断并赋值。
人的年龄应该有一定的限制,不能随便填一个数字,比如几百,几千。为了符合常理,我们可以将年龄设置在0~120岁之间。若不符合条件,我们将他设为默认值。

class Person {
   private int age;//年龄

   //提供一个处理年龄的方法
   public void setAge(int age) {
       if(age >=1 && age <=120) {
           this.age = age;
       } else {
           System.out.println("年龄不符合常理,默认为18");
           this.age = 18;//将年龄设为默认值 18
       }
   }
}

第三步: 提供一个公共的(pubilc)get方法,用于获取属性的值。

class Person {
   private int age;//年龄

   //提供一个处理年龄的方法
   public void setAge(int age) {
       if(age >=1 && age <=120) {
           this.age = age;
       } else {
           System.out.println("年龄不符合常理,默认为18");
           this.age = 18;//将年龄设为默认值 18
       }
   }
   //提供一个返回年龄的方法
   public int getAge() {
       return age;
   }
}

封装的演示

详细代码

public class Encapsulation {
   public static void main(String[] args){
       Person personA = new Person();
       Person personB = new Person();
       personA.setAge(300);
       System.out.println(personA.getAge());
       personB.setAge(30);
       System.out.println(personB.getAge());
   }
}

class Person {
   private int age;//年龄

   //提供一个处理年龄的方法
  public void setAge(int age) {
       if(age >=1 && age <=120) {
           this.age = age;
       } else {
          System.out.println("年龄不符合常理,默认为18");
         this.age = 18;//将年龄设为默认值 18
       }
   }
   //提供一个返回年龄的方法
   public int getAge() {
       return age;
   }
}

效果演示

在这里插入图片描述

相关文章:

  • 分布式限流不会用?一个注解简单搞定
  • Linux系统运维排故思路参考手册
  • 华为OD机考:0030-0031-n*n数组中二进制的最大数、整数的连续自然数之和
  • Jmeter的应用
  • 软件流程和管理(八):Ethics
  • SkyWalking持久化追踪数据
  • 数据导入与预处理-第4章-pandas数据获取
  • 机器学习之线性规划原理详解、公式推导(手推)、以及简单实例
  • 计算机网络——OSI 参考模型
  • 【.Net实用方法总结】 整理并总结System.IO中StreamWriter类及其方法介绍
  • openGl坐标系统
  • 实用工具系列 - Pycharm安装下载使用
  • Pyecharts绘图笔记
  • SNARK性能及安全
  • 学会 Python 自动安装第三方库,从此跟pip说拜拜
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • CSS选择器——伪元素选择器之处理父元素高度及外边距溢出
  • FastReport在线报表设计器工作原理
  • golang 发送GET和POST示例
  • in typeof instanceof ===这些运算符有什么作用
  • IP路由与转发
  • Javascript 原型链
  • JavaScript新鲜事·第5期
  • JS实现简单的MVC模式开发小游戏
  • PHP变量
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Web Storage相关
  • Web设计流程优化:网页效果图设计新思路
  • 离散点最小(凸)包围边界查找
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • -- 数据结构 顺序表 --Java
  • 小程序button引导用户授权
  • 移动端唤起键盘时取消position:fixed定位
  • 在GitHub多个账号上使用不同的SSH的配置方法
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # wps必须要登录激活才能使用吗?
  • #{}和${}的区别是什么 -- java面试
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (python)数据结构---字典
  • (补充):java各种进制、原码、反码、补码和文本、图像、音频在计算机中的存储方式
  • (补充)IDEA项目结构
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (力扣)1314.矩阵区域和
  • (三)Kafka 监控之 Streams 监控(Streams Monitoring)和其他
  • (提供数据集下载)基于大语言模型LangChain与ChatGLM3-6B本地知识库调优:数据集优化、参数调整、Prompt提示词优化实战
  • (译) 函数式 JS #1:简介
  • (译)计算距离、方位和更多经纬度之间的点
  • (轉)JSON.stringify 语法实例讲解
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ... 是什么 ?... 有什么用处?
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件
  • .NET CORE Aws S3 使用