day10_面向对象之封装丶构造器

封装概述

现实生活中,每一个个体与个体之间是有边界的,每一个团体与团体之间是有边界的,而同一个个体、团体内部的信息是互通的,只是对外有所隐瞒。

面向对象编程语言是对客观世界的模拟,客观世界里每一个事物的内部信息都是隐藏在对象内部的,外界无法直接操作和修改,只能通过指定的方式进行访问和修改。

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

面向对象的开发原则要遵循“高内聚、低耦合”,而“高内聚,低耦合”的体现之一:

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

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

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

如何实现封装呢?

通俗的讲,封装就是把该隐藏的隐藏起来,该暴露的暴露出来。那么暴露的程度如何控制呢?就是依赖权限修饰符来控制。访问控制修饰符来控制相应的可见边界,边界有如下:

  • 子类
  • 模块:Java9之后引入
权限修饰符如下图所示

注意事项:

  • protected修饰非静态成员,跨包时,只能在子类的非静态成员中访问,在静态成员中无论是否创建对象都不能访问。  

封装成员变量

成员变量封装的目的
  • 隐藏类的实现细节
  • 让使用者只能通过事先预定的方法来访问数据,从而可以在该方法里面加入控制逻辑,限制对成员变量的不合理访问。还可以进行数据检查,从而有利于保证对象信息的完整性。
  • 便于修改,提高代码的可维护性。主要说的是隐藏的部分,在内部修改了,如果其对外可以的访问方式不变的话,外部根本感觉不到它的修改。

成员变量(field)私有化之后,提供标准的get/set方法,我们把这种成员变量也称为属性(property)或者可以说只要能通过get/set操作的就是事物的属性,哪怕它没有对应的成员变量。

实现步骤

1:使用 private 修饰成员变量

/*
格式:private 数据类型 变量名 ;
*/private String name;private static String nationality; 

2:提供 getXxx方法 / setXxx 方法,可以访问成员变量,代码如下:

public class Student {private String name;private static String nationality;// 获取成员变量的值public static String getNationality() {return nationality;}// 设置成员变量的值public static void setNationality(String nationality) {Student.nationality = nationality;}// 获取成员变量的值public String getName() {return name;}// 设置成员变量的值public void setName(String name) {this.name = name;}
}

setXxx 方法出现的this是什么意思?为了解决局部变量与成员变量同名问题

  • 当局部变量与类变量同名时,在类变量前面加“类名.";
  • 当局部变量与实例变量同名时,在实例变量前面加“this.”

实例

public class Test {public static void main(String[] args) {Student student = new Student();student.setName("张三");Student.setNationality("中国");System.out.println(student.getName()); //张三System.out.println(Student.getNationality()); //中国}
}

构造器 

我们发现我们new完对象时,所有成员变量都是默认值,如果我们需要赋别的值,需要挨个为它们再赋值,太麻烦了。我们能不能在new对象时,直接为当前对象的某个或所有成员变量直接赋值呢。可以,Java给我们提供了构造器。

构造器的作用

在创建对象的时候为实例变量赋初始值。构造器只为实例变量初始化,不为静态类变量初始化

构造器的语法格式

构造器又称为构造方法,那是因为它长的很像方法。但是和方法还有有所区别的。

代码如下:

public class Student {private String name;private static String nationality;// 有参构造public Student(String name) {this.name = name;}// 无参构造public Student() {}// 其他代码}

注意事项:

  1. 构造器名必须与它所在的类名必须相同。

  2. 它没有返回值,所以不需要返回值类型,甚至不需要void

  3. 如果你不提供构造器,系统会给出无参数构造器,并且该构造器的修饰符默认与类的修饰符相同

  4. 如果你提供了构造器,系统将不再提供无参数构造器,除非你自己定义。

  5. 构造器是可以重载的,既可以定义参数,也可以不定义参数。

  6. 构造器的修饰符只能是权限修饰符,不能被其他任何修饰

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/765788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL】巧解客户连续递增交易

力扣题 1、题目地址 2701. 连续递增交易 2、模拟表 表:Transactions 字段名类型transaction_idintcustomer_idinttransaction_datedateamountint transaction_id 是该表的主键。每行包含有关交易的信息,包括唯一的 (customer_id, transaction_date…

总结: HQL语句

总结: HQL语句 Part1 数据库的操作Part2 数据表的操作1. 创建普通表2. 内外部表3. 内外部表转换 Part1 数据库的操作 查看数据库: show databases; 创建数据库: create database if not exists 数据库名 使用数据库: use 数据库名; 查看数据库详细信息: desc database 数据库名…

Echarts 利用多X轴实现未来15天天气预报

Echarts 利用多X轴实现未来15天天气预报 UI 设计图 Echarts 实现效果 代码实现 代码分解 echarts 图表上下均显示数据 通过设置 grid.top 和 grid.bottom 设置白天和夜间天气展示区域 grid: {top: 36%,bottom: 36%,left: 5%,right: 5%}, 天气图标的设置 由于 axisLabel 的…

【Linux】一文了解【进程优先级相关知识点】&【PRI / NI值】背后的修正原理(13)

前言 大家好吖,欢迎来到 YY 滴Linux系列 ,热烈欢迎! 本章主要内容面向接触过Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的《…

算法 之 排序算法

🎉欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ 🎉感谢各位读者在百忙之中抽出时间来垂阅我的文章,我会尽我所能向的大家分享我的知识和经验📖 🎉希望我们在一篇篇的文章中能够共同进步!!&…

实验7-2-10 简易连连看(PTA)

题目: 本题要求实现一个简易连连看游戏模拟程序。 给定一个2N2N的方阵网格游戏盘面,每个格子中放置一些符号。这些符号一定是成对出现的,同一个符号可能不止一对。程序读入玩家给出的一对位置(x1​,y1​)、(x2​,y2​),判断这两…

leetcode(Hot100)——数组篇

1、两数之和 本题使用哈希法&#xff0c;用一个哈希Map保存数组的值以及对应下标&#xff0c;代码如下&#xff1a; class Solution {public int[] twoSum(int[] nums, int target) {HashMap<Integer,Integer> map new HashMap<>();for(int i0; i<nums.length…

【网络基础】网络层基本协议介绍

目录 一、IP数据包 1.1 网络层的功能 1.2 IP数据包格式 二、ICMP协议介绍 2.1 作用 2.2 常用命令 2.2.1 Ping命令 2.2.2 tracert命令 2.3 广播域 三、ARP协议介绍 3.1 作用 3.2 原理 一、IP数据包 1.1 网络层的功能 定义了基于IP协议的逻辑地址&#xff0c;就是I…

数据结构应用——哈夫曼树

哈夫曼树 哈夫曼树的相关概念构造哈夫曼树基础算法 哈夫曼编码 哈夫曼树的相关概念 结点的权&#xff1a;有某种现实含义的数值。结点的带权路径长度&#xff1a;从树的根结点到该结点的路径长度&#xff08;经过的边数&#xff09;与该结点上权值的乘积。树的带权路径长度&am…

CAPL (Communication Access Programming Language)

CAPL (Communication Access Programming Language) 是一种专门用于模拟和测试汽车网络的脚本语言&#xff0c;特别是CAN (Controller Area Network) 和LIN (Local Interconnect Network) 网络。虽然CAPL主要用于模拟网络行为和测试网络节点&#xff0c;但它也支持一些基本的编…

XiBe希贝奶瓶好用吗?2名宝宝的宝爸深度测评分享!

几乎每个新手宝爸宝妈都会有一段时间对孩子的很多东西都是不懂的&#xff0c;一边摸索一边学习。列如关于奶瓶这个问题就困扰不少新手爸妈&#xff0c;特别是面对这么多的品牌的奶瓶完全不知道怎么选。 相信很多新手爸妈都十分担心奶瓶材质安全问题&#xff0c;所以我作为一名…

OpenCV+OpenCV-Contrib源码编译

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、OpenCV是什么&#xff1f;二、OpenCV 源码编译1.前期准备1.1 源码下载1.2 cmake安装1.3 vscode 安装1.4 git 安装1.5 mingw安装 2.源码编译2.1 打开cmake2.…

python(django)之流程接口管理后台开发

1、在models.py中加入流程接口表和单一接口表 代码如下&#xff1a; from django.db import models from product.models import Product# Create your models here.class Apitest(models.Model):apitestname models.CharField(流程接口名称, max_length64)apitester model…

Python学习笔记07

第十三章&#xff0c;面向对象 初识对象 生活中数据的组织 学校开学&#xff0c;要求学生填写自己的基础信息&#xff0c;一人发一张白纸&#xff0c;让学生自己填 我叫林军杰&#xff0c;今年31岁.来自山东省&#xff0c;我是男的&#xff0c;中国人 内容混乱 改为登记表…

详细分析Python中的enumerate()函数(附多个Demo)

目录 前言1. 基本知识2. Demo 前言 对于Python的基本函数&#xff0c;从实战中获取确切知识 1. 基本知识 enumerate() 接受一个可迭代对象作为输入&#xff0c;并返回一个枚举对象这个枚举对象包含了原始可迭代对象中的每个元素以及对应的索引它允许在循环中同时获取索引和值…

uboot - pinctrl - FPGA回片前测试阶段 - 设置GPIO引脚复用失败

问题描述 pinctrl设置引脚复用失败&#xff0c;没有调用到controller中的set_groups_function函数。 问题定位 pinctrl如何注册dm节点如何进行设备树中各个设备节点下的复用配置为什么没调用到控制器实现的set_groups_function函数 &gpio0 {status "okay";p…

Flutter插件开发与发布指南

在Flutter应用程序开发中&#xff0c;有时候我们会遇到需要使用原生功能的情况&#xff0c;这时候就需要编写Flutter插件来实现与原生平台的交互。本篇博客将介绍如何编写、发布和使用Flutter插件。 1. 准备工作 在开始之前&#xff0c;确保你已经安装好Flutter开发环境&…

JavaScript中改进的数组功能

ES6标准为数组添加了很多新功能&#xff0c;例如&#xff0c;创建数组的新方法&#xff0c;创建定型数组&#xff08;Typed Array)的能力等。 1、创建数组 在ES6以前&#xff0c;创建数组的方式主要有两种&#xff0c;一种是调用Array构造函数&#xff0c;另一种是用数组字面…

VMware Workstation Pro 17虚拟机超级详细搭建(含redis,nacos,docker)(一)

今天从零搭建一下虚拟机的环境&#xff0c;把nacos&#xff0c;redis等微服务组件还有数据库搭建到里面&#xff0c;首先看到的是我们最开始下载VMware Workstation Pro 17 之后的样子&#xff0c;总共一起应该有三部分因为篇幅太长了 下载地址 : VMware - Delivering a Digit…

Vue动态设置控制表格列表展现列

最近遇到一个需求,表格列表默认不展示某一列,当我设置后可以展示该列,也可以展示和隐藏别的列,起到可以对整个表格列展示隐藏控制的效果,如下示例,默认不展示“单位名称”这一列,在我点击设置齿轮后可以看到,有“单位名称”这一列,但未打钩: 当我勾中“单位名称”,…