Java:封装

文章目录

  • 一、概念
  • 二、实现
  • 三、测试
  • 四、总结

一、概念

在面向对象编程中, 封装从字面上来理解就是包装的意思,特点就是信息隐藏,防止该类的代码和数据被外部类的代码随机访问。

封装的优点:

  1. 良好的封装能够减少耦合。

  2. 统一接口。

  3. 可以保证数据的合法性。

  4. 隐藏信息,实现细节。


二、实现

  1. 修改属性的可见性来限制对属性的访问(一般限制为private),例如:
public class Student {
    private String name;
    private int age;
}

这段代码中,将 name 和 age 属性设置为私有的,只能本类才能访问,其他类都访问不了,如此就对信息进行了隐藏。

  1. 对每个值属性提供对外的公共方法访问,用于对私有属性的访问,例如:
public class Student {
    private String name;
    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

this 关键字是为了解决 成员变量 和 局部变量 之间发生的同名的冲突。


三、测试

1、提供实体类

// student.java
public class Student {
    private String name;

    private int age;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

以上实例中public方法是外部类访问该类成员变量的入口。

通常情况下,这些方法被称为getter和setter方法。

因此,任何要访问类中私有成员变量的类都要通过这些getter和setter方法。

2、如何访问

// Test.java
public class Test {
    public static void main(String[] args) {
        // 1、创建对象
        Student student = new Student();
        // 2、赋值
        student.setName("张三");
        student.setAge(18);
        // 3、打印对象
        System.out.println("学生的姓名:" + student.getName() + "\n学生的年龄:" + student.getAge());
    }
}

运行结果:

学生的姓名:张三
学生的年龄:18

四、总结

大家看到这,可能会感觉为什么要用封装呢,我们使用普通调用的时候,输入任何值都是可以的,比
如:上述对象的年龄字段我不输入18,而是-18,这显然不合理,这有的同学就会想到,我加一层判断不就行了,但是你要想,如果你创建一千个对象,你难道要加一千层判断吗?但是封装的话,可以在类中的get/set方法,添加逻辑,如输入一个年龄的时候,可以在类中进行一些条件限制,比如要求输入年龄的范围,这样后面创建对象使用get/set方法都会走一遍你添加过的逻辑,这也是保证数据合法性的手段。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(一)项目实践-利用Appdesigner制作目标跟踪仿真软件

目录 前言 一、软件页面设计 二、仿真部分 (一)参数输入 (二)绘图部分 (三)目标追踪程序 总结 前言 本博客有一个专栏用来介绍有关MATLAB中的Appdesigner的操作以及使用,本文是为了深化读者对于…

昇思25天学习打卡营第11天|ResNet50图像分类

文章目录 昇思MindSpore应用实践基于MindSpore的ResNet50图像分类1、ResNet50 简介2、数据集预处理及可视化3、构建网络构建 Building Block构建 Bottleneck Block构建 ResNet50 网络 4、模型训练5、图像分类模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录…

Java | Leetcode Java题解之第217题存在重复元素

题目&#xff1a; 题解&#xff1a; class Solution {public boolean containsDuplicate(int[] nums) {Set<Integer> set new HashSet<Integer>();for (int x : nums) {if (!set.add(x)) {return true;}}return false;} }

【JavaWeb程序设计】JSP内置对象

目录 一、通过测试以下代码&#xff0c;了解各种隐含对象与作用域变量的使用 1. request隐含对象的使用&#xff08;request.jsp&#xff09; 2. out隐含对象的使用&#xff08;out.jsp&#xff09; 3. application隐含对象的使用&#xff08;application.jsp&#xff09; …

ONLYOFFICE最新8.1版本——桌面编辑器简单测评

前言 大家好&#xff0c;我是小雨&#xff0c;看到最近ONLYOFFICE更新了最新的版本&#xff0c;更新了一下当前版本来具体的测评一下&#xff0c;先来看看官网提供的各类更新信息&#xff0c;下面是我找到的三个主页&#xff0c;包括功能演示链接&#xff0c;官网连接以及专门…

UDP协议:独特之处及其在网络通信中的应用

在网络通信领域&#xff0c;UDP&#xff08;用户数据报协议&#xff0c;User Datagram Protocol&#xff09;是一种广泛使用的传输层协议。与TCP&#xff08;传输控制协议&#xff0c;Transmission Control Protocol&#xff09;相比&#xff0c;UDP具有其独特的特点和适用场景…

Go基础知识

目标 简单介绍一下 GO 语言的诞生背景&#xff0c;使用场景&#xff0c;目前使用方案简单介绍一下 GO的使用&#xff0c;GO的基础语法&#xff0c;简单过一下一些GO的语言例子着重介绍一下GO的特性&#xff0c;为什么大家都使用GO语言&#xff0c;GO的内存结构、为什么都说GO快…

python No interpreter

在 Python 的环境中&#xff0c;如果你遇到了 "No interpreter" 的错误或提示&#xff0c;这通常意味着你的开发环境或IDE&#xff08;如PyCharm、VS Code、Jupyter等&#xff09;没有找到 Python 解释器。要解决这个问题&#xff0c;你可以按照以下步骤操作&#xf…

基于Transformer神经网络的锂离子电池剩余使用寿命估计MATLAB实现【NASA电池数据集】

Transformer神经网络 基于Transformer神经网络的锂离子电池剩余使用寿命估计是一种先进的方法&#xff0c;它利用了Transformer模型在处理序列数据方面的优势。 Transformer能够有效地捕捉时间序列中的长程依赖关系和非线性模式&#xff0c;相比传统的基于循环神经网络&…

InnoDB中的表级锁、页级锁、行级锁详解

MySQL支持三种层级的锁定 我们知道&#xff0c;MySQL支持三种层级的锁定&#xff0c;分别为&#xff1a; 表级锁定 表级锁是MySQL中锁定粒度最大的一种锁&#xff0c;表示对当前操作的整张表加锁&#xff0c;它实现简单&#xff0c;资源消耗较少&#xff0c;被大部分MySQL引…

【C++/STL】优先级队列的介绍与模拟实现仿函数

✨ 万物与我皆是自由诗 &#x1f30f; &#x1f4c3;个人主页&#xff1a;island1314 &#x1f525;个人专栏&#xff1a;C学习 &#x1f680; 欢迎关注&#xff1a;&#x1f44d;点赞 &#x1f442;&#x1…

深入理解TCP协议格式(WireShark分析)

传输控制协议&#xff08;TCP&#xff09;是互联网中最为关键的通信协议之一。了解TCP协议的细节不仅对于网络工程师至关重要&#xff0c;对于任何涉及网络通信的软件开发人员而言都是必备的知识。本文旨在深入探讨TCP协议&#xff0c;从协议的基本概述到其工作机制&#xff0c…

多维度多场景文档门户,鸿翼ECM文档云打造文档管理新范式

​在现代企业运营中&#xff0c;内容协作的效率直接影响到组织的整体表现和竞争力。传统的文档管理系统都是通过目录结构的方式进行文件管理&#xff0c;在实际业务中无法满足用户多视角、多维度、多场景的文档业务需求。因此&#xff0c;搭建结合文档体系的业务门户是许多企业…

AI绘画【光影模型】,穿越赛博迷雾,重塑光影艺术本真魅力

有时候是不是觉得单纯依靠大模型产生的图片作品光线方面平平无奇&#xff0c;依靠提示词&#xff0c;各种权重的调整费了九牛二虎之力才抽到一张感觉还算满意的作品。这个时候我们可以考虑结合相关Lora来进行。今天带来了一款光影氛围灯效果Lora——None-光染摄影&#xff0c;该…

进程的概念

一.进程和程序的理解 首先抛出结论&#xff1a;进程是动态的&#xff0c;暂时存在于内存中&#xff0c;进程是程序的一次执行&#xff0c;而进程总是对应至少一个特定的程序。 程序是静态的&#xff0c;永久的存在于磁盘中。 程序是什么呢&#xff1f;程序其实就是存放在我们…

Windows如何查看端口是否占用,并结束端口进程

需求与问题&#xff1a;前后端配置了跨域操作&#xff0c;但是仍然报错&#xff0c;可以考虑端口被两个程序占用&#xff0c;找不到正确端口或者后端接口书写是否规范&#xff0c;特别是利用Python Flask书写时要保证缩进是否正确&#xff01; Windows操作系统中&#xff0c;查…

Matlab中collectPlaneWave函数的应用

查看文档如下&#xff1a; 可以看出最多5个参数&#xff0c;分别是阵列对象&#xff0c;信号幅度&#xff0c;入射角度&#xff0c;信号频率&#xff0c;光速。 在下面的代码中&#xff0c;我们先创建一个3阵元的阵列&#xff0c;位置为&#xff1a;&#xff08;-1,0,0&#x…

代码随想录算法训练Day57|LeetCode200-岛屿数量、LeetCode695-岛屿的最大面积

岛屿数量 题目描述 力扣200-岛屿数量 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此…

设计模式之单例模式(Java)

单例模式实现方式&#xff1a;懒汉式、饿汉式、双重检查、枚举、静态内部类&#xff1b; 懒汉式&#xff1a; /*** 懒汉式单例模式* author: 小手WA凉* create: 2024-07-06*/ public class LazySingleton implements Serializable {private static LazySingleton lazySinglet…

操作系统中的权限说明

什么是权限 权限在操作系统中是一个重要的功能&#xff0c;它允许你控制谁可以读取、写入或执行某个文件。不同的操作系统和文件系统可能有不同的权限模型&#xff0c;但在类Unix系统&#xff08;如Linux和macOS&#xff09;中&#xff0c;文件权限通常由三部分组成&#xff1a…