Java中的封装和封装的案例

12 篇文章 2 订阅
订阅专栏

目录

封装

封装的实现步骤

封装的例子

 封装实现的意义

封装的综合应用案例

封装

封装隐藏了类的内部实现机制,可以不在影响使用的情况下改变了类的内部结构,同时也保护了数据。对外界而言它的内部细节是隐藏的,暴露给外界的只是它的访问方法。

属性的封装:使用者只能通过事先定制好的方法来访问数据,可以方便地加入逻辑控制,限制对属性的不合理操作

方法的封装:使用者按照既定的方式调用方法,不必关心方法的内部实现,便于使用,便于修改,增强代码的可维护性

封装的实现步骤

  1. 通过访问限制符修改类中属性的可见性,从而限制对类中属性的访问。
  2. 对每个值属性提供对外访问的公共方法,即创建get/set方法,来为外部程序提供对类中的私有属性进行访问的途径。
  3. 在get/set方法中添加控制语句规范代码

封装的例子

设置私有属性,设置get/set方法,可以通过Alt+insert自动生成,也可以自己写一些代码来控制

package encapsulation;

/**
 * @description:
 * @author: 解颜
 * @date: 2022/3/12 19:45
 */
public class Person {
    private String name;
    private int age;
    private String sex;

    public String getName() {
        return name;
    }

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

    public int getAge() {
        return age;
    }

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

    public String getSex() {
        return sex;
    }

      public void setSex(String sex) {
        if(sex=="男"||sex=="女")
            this.sex = sex;
        else
            return;
    }
}

 封装实现的意义

可以过滤一些非法赋值

封装说明一个类行为和属性与其他类的关系,低耦合,高内聚;

封装的综合应用案例

封装的综合应用案例参照: https://blog.csdn.net/y20_20/article/details/98367664

1. 模拟场景实现

(1)、需求:某校开设计算机科学与应用专业,专业编号J0001,学制四年,现有3名学生报名学习了这个专业

(2)、需求分析:专业类(专业名称、专业编号、学制年限)、方法(专业相信信息);学生类(学生姓名、学号、性别、年龄、专业对象)、方法(介绍学生信息及所学专业)

(3)、实现专业和学生关联:

方案一:在学生类的自我 介绍 方法中,添加2个参数:专业名称和学制年限
方案二:在学生类的自我 介绍 方法中,在方法中添加1个专业对象作为参数,通过其属性获得相关信息
 方案三:在类中添加专业对象作为属性,通过其属性获得相关信息
(4)案例扩展:

扩展功能:实现某种专业下统计报名学习的人数

扩展功能实现:在专业类中添加数组、统计人数2个属性,同时添加一个添加学生对象的方法将对象添加进去并统计人数

2. 模拟场景代码实现

编写Subject类:

package encapsulation;

/**
 * @description:
 * @author: 解颜
 * @date: 2022/3/12 20:12
 */
public class Subject {
    /*
     * 封装的步骤一:将属性设置为私有,禁止类外部进行访问
     */
    private String subjectName;//专业名称
    private String subjectNum;//专业编号
    private int subjectTime;//专业学时
    private Student[] studentArray;//用来存储选修某专业的学生对象
    private int studentCount;//记录选修某专业的人数
    public Student[] getStudentArray() {
        if(studentArray==null)
            this.studentArray=new Student[200];
        return studentArray;
    }
    public void setStudentArray(Student[] studentArray) {
        this.studentArray = studentArray;
    }

    //无参构造方法
    public Subject(){

    }
    //有参构造方法
    public Subject(String subjectName,String subjectNum,int subjectTime) {
        this.setSubjectName(subjectName);
        this.setSubjectNum(subjectNum);
        this.setSubjectTime(subjectTime);
    }
    //有参构造
    public Subject(String subjectName,String subjectNum,int subjectTime,Student[] studentArray) {
        this.setSubjectName(subjectName);
        this.setSubjectNum(subjectNum);
        this.setSubjectTime(subjectTime);
        this.setStudentArray(studentArray);
    }
    public int getStudentCount() {
        return studentCount;
    }
    public void setStudentCount(int studentCount) {
        this.studentCount = studentCount;
    }
    /*
     * 封装类的步骤二:设置类外部访问属性的接口
     * 封装类 的步骤三:通过getter/setter方法添加控制语句
     */
    //预留访问类的接口
    public void setSubjectName(String subjectName) {
        this.subjectName=subjectName;
    }
    public String getSubjectName() {
        return this.subjectName;
    }

    public void setSubjectNum(String SubjectNum) {
        this.subjectNum=SubjectNum;
    }
    public String getSubjectNum() {
        return this.subjectNum;
    }

    public void setSubjectTime(int subjectTime) {
        if(subjectTime<=0)
            return;
        this.subjectTime=subjectTime;
    }
    public int getSubjectTime() {
        return this.subjectTime;
    }
    //在类中编写一个输出详细信息的方法
    public String printDetail() {
        String ref="专业详细信息为:\n专业名称:"+this.getSubjectName()+"\n专业编号:"
                +this.getSubjectNum()+"\n学时:"+this.getSubjectTime();
        return ref;
    }
    /**
     * 添加学员到数组中并记录数组中成员个数
     * @param student 传递进入方法的学生对象
     */
    public void addStudent(Student student) {
        for (int i = 0; i < this.getStudentArray().length; i++) {
            if (this.getStudentArray()[i] == null) {
                this.getStudentArray()[i] = student;
                this.studentCount = i + 1;
                return;
            }
        }
    }
}

编写Student类:

package encapsulation;

/**
 * @description:
 * @author: 解颜
 * @date: 2022/3/12 20:13
 */
public class Student {
    private String studentNo;
    private String studentName;
    private String studentSex;
    private int studentAge;
    //方案三,将学科对象作为属性
    private Subject subject;

    public Subject getSubject() {
        if(subject==null)
            subject=new Subject();
        return subject;
    }
    public void setSubject(Subject subject) {
        this.subject = subject;
    }
    //无参构造
    public Student() {

    }
    //多参构造,实现对全部属性的赋值
    public Student(String studentNo,String studnetName,String studentSex,int studentAge) {
        this.setStudentNo(studentNo);
        this.setStudentName(studnetName);
        this.setStudentSex(studentSex);
        this.setStudentAge(studentAge);
    }
    //将Subject对象初始化的构造函数
    public Student(String studentNo,String studnetName,String studentSex,int studentAge,Subject subject) {
        this.setStudentNo(studentNo);
        this.setStudentName(studnetName);
        this.setStudentSex(studentSex);
        this.setStudentAge(studentAge);
        this.setSubject(subject);
    }
    public String getStudentNo() {
        return studentNo;
    }
    public void setStudentNo(String studentNo) {
        this.studentNo = studentNo;
    }
    public String getStudentName() {
        return studentName;
    }
    public void setStudentName(String studentName) {
        this.studentName = studentName;
    }
    public String getStudentSex() {
        return studentSex;
    }
    public void setStudentSex(String studentSex) {
        if(studentSex=="男"||studentSex=="女")
            this.studentSex = studentSex;
        else
            return;
    }
    public int getStudentAge() {
        return studentAge;
    }
    public void setStudentAge(int studentAge) {
        if(studentAge<=0||studentAge>100)
            studentAge=18;
        this.studentAge = studentAge;
    }
    /**
     * 介绍学生详细信息的方法(新增方法参数)
     * @return 返回学生姓名、学号、年龄、性别、专业名称、学制年限等信息
     */
    public String studentInfo(String subjectName,int subjectTime) {
        String ref="学生详细信息:\n学生姓名:"+this.getStudentName()+"\n学生学号:"+
                this.getStudentNo()+"\n学生年龄:"+this.getStudentAge()+"\n学生性别:"+
                this.getStudentSex()+"\n所学专业名称:"+subjectName+"\n学制年限:"+subjectTime;
        return ref;
    }
    /**
     * 学生详细信息介绍的方法重载(将对象作为方法参数)
     * @return 返回学生姓名、学号、年龄、性别、专业名称、学制年限等信息
     */
    public String studentInfo(Subject subject) {
        String ref="学生详细信息:\n学生姓名:"+this.getStudentName()+"\n学生学号:"+
                this.getStudentNo()+"\n学生年龄:"+this.getStudentAge()+"\n学生性别:"+
                this.getStudentSex()+"\n所学专业名称:"+subject.getSubjectName()+"\n学制年限:"+subject.getSubjectTime();
        return ref;
    }
    /**
     * 返回学生相信信息介绍方法(将对象作为类的属性)
     * @return 返回学生姓名、学号、年龄、性别、专业名称、学制年限等信息
     */
    public String studentInfo() {
        String ref="学生详细信息:\n学生姓名:"+this.getStudentName()+"\n学生学号:"+
                this.getStudentNo()+"\n学生年龄:"+this.getStudentAge()+"\n学生性别:"+
                this.getStudentSex()+"\n所学专业名称:"+this.getSubject().getSubjectName()+"\n学制年限:"
                +this.getSubject().getSubjectTime();
        return ref;
    }
}

编写Test类:

package encapsulation;

/**
 * @description:
 * @author: 解颜
 * @date: 2022/3/12 20:14
 */
public class Test {
    public static void main(String[] args) {
        Subject subject = new Subject("计算机科学与应用", "j0001", 4);
        System.out.println(subject.printDetail());
        System.out.println("-------------在方法中通过新增参数实现扩展-------------");
        Student student = new Student("s01", "张三", "男", 18);
        System.out.println(student.studentInfo("计算机科学与应用", 4));
        System.out.println("------------将对象作为方法参数--------------");
        Student student1 = new Student("s02", "李四", "女", 28);
        System.out.println(student1.studentInfo(subject));
        System.out.println("-------------将对象作为类的属性-------------");
        Student student2 = new Student("s03", "王五", "女", 17, subject);
        System.out.println(student2.studentInfo());
        System.out.println("-------------想知道一个专业到底有多少个学生选修-------------");
        subject.addStudent(student2);
        subject.addStudent(student1);
        subject.addStudent(student);
        System.out.println("选修" + subject.getSubjectName() + "专业的学生有" + subject.getStudentCount() + "名");
    }
}

运行结果 

 

java封装简单例子_Java封装简单例子
weixin_28675661的博客
02-16 2764
先来个例子看看;public class Man{//对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性private String name;private int age;private Woman wife;//对改人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄public void setWife(Woman wife){this.wife = ...
Java封装实例
AD_plus的博客
05-17 5009
在面向对象程式设计方法封装(英语:Encapsulation)是指,一种将抽象性函式接口的实作细节部份包装、隐藏起来的方法。 封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。 要访问该类的代码和数据,必须通过严格的接口控制。 封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。 适当的封装可以让程式码更容易理解与维护,也加强了程式码...
封装案例
m0_47073109的博客
03-29 149
封装 在类定义属性的时候,一般需要把属性隐藏起来。 如果外界需要访问这个属性,那么就提供公共方法对其访问。 封装的优点: 提高代码的安全性,重要信息可以私有化,不对外暴露 提高代码的复用性,常用的代码或者功能封装到方法,可以在其他地方反复调用 封装代码的实现细节,便于修改内部代码,提高可维护性 简化外部的调用,便于调用者使用 /** * POJO类 * 一个类只要私有的属性以及对应的get/set方法 */ public class Person { //将属性藏起来 // pr
JAVA_封装例子
08-16
一个详细讲解JAVA_封装性的例子 希望可以帮助到你。
Java封装简单例子
greenboy056的专栏
11-17 625
  Java封装简单例子 先来个例子看看; public class Man { //对属性的封装,一个人的姓名,年龄,妻子都是这个对象(人)的私有属性 private String name; private int age; private Woman wife; //对改人对外界提供方法的封装,可以设定妻子,姓名,年龄也可以获得男人的姓名和年龄 ...
封装的实例
weixin_58871119的博客
06-09 184
1,有一个专业类,有一个专业对象,专业名称:计算机科学与技术,专业编号:J001,专业年限:4,对年限添加约束,如果输入小于0,则默认为0,否则显示输人的值 2有一个学生类,有一个学生对象,学生姓名:zhng'a ...
java封装/继承简单实例
尤词的博客
07-13 862
简单的实例帮助读者理解什么是封装,什么是继承
Java封装统一的Result Model案例
08-24
Java 封装统一的 Result Model 案例 ...本文主要介绍了 Java 封装统一的 Result Model 案例,通过定义错误码和实现 Result Model,提供了一种灵活的错误处理机制,可以帮助开发者更好地处理错误信息。
Java使用BigDecimal进行运算封装的实际案例
08-26
今天,我们将讨论Java使用BigDecimal进行运算封装的实际案例。BigDecimal是Java一个用于处理精确数字计算的类,它提供了多种数学运算方法,如加法、减法、乘法、除法等。 在实际项目,经常需要对金额进行计算...
Java__封装案例.mp4
07-09
Java__封装案例.mp4
JAVA面向对象 封装原理及实例解析
08-25
JAVA面向对象封装原理及实例解析是面向对象编程的核心概念,通过对封装的理解和应用,可以更好地设计和实现面向对象的程序。下面是对JAVA面向对象封装原理及实例解析的详细介绍: 一、抽象 抽象是面向对象编程的...
Auto_adb:java 封装adb命令
06-18
在本案例封装ADB命令意味着将命令行操作转化为Java方法,提供更友好的API供开发者调用。 3. **命令行接口 (CLI) 转 Java API**:将CLI命令转换为Java API,可以避免开发者直接与命令行交互,减少手动输入错误,...
javajava封装 案例 (起点闭关计划)
weixin_48680173的博客
02-19 109
关于java封装案例: 首先我们创建一个Computer类,在类内编写相关的属性和方法 代码如下: /** * @author cs * 封装案例1 */ package com.qidianit.work1; public class Computer { private String brand; private String price; public void work(){ System.out.println(price +"元的"
封装案例
欢迎来到我的博客小天地
07-12 279
封装 封装 是面向对象编程的一大方法 面向对象编程的第一步 — 将 属性 和方法 封装 到一个抽象的 类 外界 使用 类 创建 对象,然后 让对象调用方法 对象方法的细节 都被 封装 在类的内部 面向对象封装案例一 需求 小明体重 75.0公斤 小明每次跑步会减肥0.5公斤 小明每次吃东西会增加1公斤 class Person: def __init__(self, name, weight): # self.属性名 = 形参 self.name =
java封装实例教程,Java封装
weixin_34449682的博客
03-15 405
Java封装1 什么是Java封装Java封装是将代码和数据包装到单个单元的过程。使用Java封装,我们可以通过将类的所有数据成员设为私有来在Java创建一个完全封装的类。然后我们可以使用setter和getter方法来设置和获取其的数据。Java Bean类就是完全封装的类的例子。2 Java封装的优势通过封装仅提供setter或getter方法,可以将类设置为只读或只写。封装为你提...
封装简单例子
FBB360JAVA的博客
01-30 3538
面向对象三大特征之简介封装 举个例子 引入 package com.u1.day0130; /** * 封装的演示。 * * @author Feng 2018年1月30日下午2:37:59 */ public class Demo02 { /** * 用人的属性作为成员变量。 */ public String name;// 名字
java代码封装_java语言封装类代码示例
weixin_35834687的博客
02-15 762
在面向对象程序设计方法封装(Encapsulation)是指一种将抽象性函式接口的实现细节部分包装‘隐藏起来的方法。数据被保护在内部,隐藏内部实现细节,对外提供接口与外部交互。使用封装的步骤将类的所有属性使用关键字private去修饰,把它们变成私有的,不允许外部类直接访问生成或者提供公共的setter/getter方法去操作这些被隐藏起来的属性在类自己的 setter/getter方法加入...
封装的总结及案例
weixin_44947939的博客
07-27 1166
封装的总结及案例&&包的初识: 一.认识修饰符: ①public 公共的:最大访问级别。 ②private 私有的:最小访问级别。 ③default 系统默认值:包级私有访问级别。 ④protected 受保护的:同类,同包,子类。 二.封装的概念和原则: 概念:将类的某些信息隐藏在类的内部,不允许外部程序直接访问,而是通过该类提供的方法来实现对隐藏信息的操作和访问。 原则:把所有的属性藏起来。 三.封装的好处: ①便于使用者正确使用系统,防治错误修改属性。 ②有助于系统之间的松耦合,提高系
Java-网络
最新发布
2301_81543552的博客
09-14 802
Java的网络编程主要涉及使用Socket类进行网络通信,以及理解各种网络协议。以下是一些关键概念和示例代码,帮助您入门。
Java基础:封装特性详解
Java封装主要通过访问修饰符来实现,包括`public`、`private`、`protected`和默认的包访问权限。其: - `public`:任何地方都可以访问。 - `private`:只有在定义它的类内部可以访问,外部无法直接访问。 - ...
写文章

热门文章

  • Git提交后本地的代码丢失的解决方案 12104
  • Class not found(没有发现测试)我是怎么解决的 9739
  • (已解决)vue运行出错:Module build failed Error Node Sass does not yet support your current environment 8874
  • Mybatis中的多表操作(查询修改删除) 5782
  • 【已解决,可放心食用】spark-slave1: ssh: Could not resolve hostname spark-slave1: Name or service not know 5529

分类专栏

  • Java基础 12篇
  • JVM
  • SpringBoot 1篇
  • Linux 2篇
  • 分布式 2篇
  • 算法题 8篇
  • 数据结构 3篇
  • Mysql 5篇
  • Mybatis 2篇
  • vue 1篇

最新评论

  • Git提交后本地的代码丢失的解决方案

    llyllylly123: 爸爸行为

  • Git提交后本地的代码丢失的解决方案

    黄桃罐头和你: 表情包救我一条狗命

  • 在idea中SQL语句运行两遍

    虞雨Sakura: 相同问题,尝试有效

  • Mybatis中的多表操作(查询修改删除)

    xpuxd3ar: 前端有所有的信息的 都会save进去

  • Class not found(没有发现测试)我是怎么解决的

    0基础深度学习: 我也不行,请问您最后是怎么解决的呢?

大家在看

  • 数据结构:二叉树 1
  • 【linux】shell编程
  • 深入了解AES_GCM算法 575
  • 京东返利APP的高并发与高可用架构设计 2027
  • 数据集 InterHand2.6M 双手交互 三维手势建模 >> DataBall

最新文章

  • Java中的反射
  • 重载是什么?只有返回值类型不同算不算重载?为什么?
  • 面向过程与面向对象的区别与联系
2023年4篇
2022年13篇
2021年21篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赚钱去流浪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家洛阳镂空玻璃钢彩绘雕塑公司绍兴商场美陈厂家直销商洛玻璃钢雕塑厂家电话幼儿户外玻璃钢雕塑玻璃钢雕塑作品图片琼海商场美陈揭阳玻璃钢卡通雕塑玻璃钢雕塑垃圾桶手工艺品浙江周年庆典商场美陈报价徐汇区玻璃钢雕塑厂玻璃钢艺术雕塑有多好玻璃钢浮雕雕塑供应商玻璃钢雕塑采购曲阳玻璃钢雕塑园林山西多彩玻璃钢雕塑玻璃钢骆驼雕塑售价玻璃钢浮雕雕塑小品定制厂家玻璃钢 泡沫雕塑玻璃钢牛雕塑价格福建中庭商场美陈怎么样西安人物玻璃钢雕塑销售厂家莫斯科古姆百货商场圣诞美陈眉山市玻璃钢雕塑定制玻璃钢雕塑创意上海卡通玻璃钢雕塑加工厂广东常见商场美陈批发南平模压法玻璃钢雕塑销售普洱市玻璃钢雕塑价钱郑州市玻璃钢雕塑厂阿拉尔商场美陈香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化