类的封装和包(JAVA)

简介: 类的封装和包(JAVA)

封装

所有的OOP语言都会有三个特征:

    1. 封装
    2. 继承
    3. 多态

    本篇文章会为大家带来有关封装的知识。

    在我们日常生活中可以看到电视就只有那么几个按键(开关,菜单……)和一些接口,而而我们通过这些东西就可以实现我们的需求,并不用深究它的构造。而它内部的一些构造(CPU,……)厂家都会用一个外壳来吧它们封装起来不让我们直接看到里面的东西。

    OOP语言中的封装就是:将数据和操作数据的方法进行有机结合,隐藏对象的属性和实现细节,仅对外公开接口和方法来和对象进行交互。

    那么问题来了我们知道我们在类外可以使用‘.’操作符来访问它的内部属性,那它应该如何隐藏属性和实现细节呢?


    image.png

    在Java中主要通过类和访问权限来实现封装:类可以将数据以及封装数据的方法结合在一起,更符合人类对事物的认知,而访问权限用来控制方法或者字段能否直接在类外使用。

    范围 private

           默认的

    (什么都不写)

    protected public
    同一包中的同一类 可以 可以 可以 可以
    同一包中的不同类
    可以 可以 可以
    不同包中的子类

    可以 可以
    不同包中的非子类


    可以
    • public:可以理解为一个人的外貌特征,谁都可以看得到;
    • private:只有自己知道,其他人都不知道

    此时我们就可以通过访问限定符来限制类中的成员不被外界所访问。

    从表格中可以看出它们的范围都是包和类,那么类我们知道是什么,那包是个什么东西呢?暂时可以不用管文章后边有介绍。

    在同一个包中:

    此时你可以不用管包是什么,因为我们在学习阶段平时都是在同一个包中进行代码的编写。

    image.png

     此时我们可以看到虽然类当中有name属性可是由于它的权限是private所以当我们在类的外部进行访问时系统就会报错。而age的权限是默认的可以被同一个包中的不同类进行访问。

    那么如果我们想对name进行修改应该怎么办?因为它被private所修饰只能被类中的成员所访问,所以此时我们就可以写一个修改name的方法或者也是最简单粗暴的方法直接将private进行修改。

    classStudent{
    privateStringname;
    intage;
    publicStringgetName() {
    returnname;
        }
    publicvoidsetName(Stringname) {
    this.name=name;
        }
    }
    publicclassMain {
    publicstaticvoidmain(String[] args) {
    Studenta=newStudent();
    a.setName("zhangsan");
    System.out.println(a.getName());
    System.out.println(a.age);
        }
    }

    image.gif

    image.png

    包的概念:

          为了更好的管理类,把多个类收集在一起成为一组,称为软件包。

    注:在同一个工程中允许存在相同名称的类,只要处在不同的包中即可。

    其实包你可以简单理解为文件夹

    在JAVA中你可以通过import语句导入包中的类。

    没错我们平时再输入输出时在代码第一行写的和C语言头文件相似的语句其实就是在导入包中的类。比如:


    import java.util.Scanner;

    自定义包

    自定义包的基本规则:

    1. 在文件的最上方加上一个 package 语句指定该代码在哪个包中;
    2. 包名需要尽量指定成唯一的名字, 通常会用公司的域名的颠倒形式(例如:com.baidu.www);
    3. 包名要和代码路径相匹配. 例如创建 com.baidu.www 的包, 那么会存在一个对应的路经com/baidu/www 来存储代码;
    4. 如果一个类没有 package 语句, 则该类被放到一个默认包中。

    首先我们如何创建一个包:

    在IDEA中创建包的过程如下,先右击src然后鼠标放在new然后点击package;


    image.png

    然后在你创建的包上右击创建一个类:

    image.png

    此时你就可以看见IDEA在该路径下创建了一个文件:

    image.png

    而此时我们可以看见创建的类上面多了一个语句

    image.png

    而我们之前是系统默认的包所以没有。

    image.png

    在不同包中:

    此时因为两个类没有构成父子关系所以只有sex没有报错。

    image.png

    如下只有protected和public修饰的可以在不同包的子类中访问。

    image.png

    目录
    相关文章
    |
    7天前
    |
    Java 开发者
    重学Java基础篇—Java类加载顺序深度解析
    本文全面解析Java类的生命周期与加载顺序,涵盖从加载到卸载的七个阶段,并深入探讨初始化阶段的执行规则。通过单类、继承体系的实例分析,明确静态与实例初始化的顺序。同时,列举六种触发初始化的场景及特殊场景处理(如接口初始化)。提供类加载完整流程图与记忆口诀,助于理解复杂初始化逻辑。此外,针对空指针异常等问题提出排查方案,并给出最佳实践建议,帮助开发者优化程序设计、定位BUG及理解框架机制。最后扩展讲解类加载器层次与双亲委派机制,为深入研究奠定基础。
    27 0
    |
    13天前
    |
    缓存 安全 Java
    《从头开始学java,一天一个知识点》之:输入与输出:Scanner与System类
    你是否也经历过这些崩溃瞬间?三天教程连`i++`和`++i`都说不清,面试时`a==b`与`equals()`区别大脑空白,代码总是莫名报NPE。这个系列就是为你打造的Java「速效救心丸」!每天1分钟,地铁通勤、午休间隙即可学习。直击高频考点和实际开发中的“坑位”,拒绝冗长概念,每篇都有可运行代码示例。涵盖输入输出基础、猜数字游戏、企业编码规范、性能优化技巧、隐藏技能等。助你快速掌握Java核心知识,提升编程能力。点赞、收藏、转发,助力更多小伙伴一起成长!
    40 19
    |
    7天前
    |
    存储 监控 安全
    重学Java基础篇—类的生命周期深度解析
    本文全面解析了Java类的生命周期,涵盖加载、验证、准备、解析、初始化、使用及卸载七个关键阶段。通过分阶段执行机制详解(如加载阶段的触发条件与技术实现),结合方法调用机制、内存回收保护等使用阶段特性,以及卸载条件和特殊场景处理,帮助开发者深入理解JVM运作原理。同时,文章探讨了性能优化建议、典型异常处理及新一代JVM特性(如元空间与模块化系统)。总结中强调安全优先、延迟加载与动态扩展的设计思想,并提供开发建议与进阶方向,助力解决性能调优、内存泄漏排查及框架设计等问题。
    27 5
    |
    16天前
    |
    前端开发 JavaScript Java
    [Java计算机毕设]基于ssm的OA办公管理系统的设计与实现,附源码+数据库+论文+开题,包安装调试
    OA办公管理系统是一款基于Java和SSM框架开发的B/S架构应用,适用于Windows系统。项目包含管理员、项目管理人员和普通用户三种角色,分别负责系统管理、请假审批、图书借阅等日常办公事务。系统使用Vue、HTML、JavaScript、CSS和LayUI构建前端,后端采用SSM框架,数据库为MySQL,共24张表。提供完整演示视频和详细文档截图,支持远程安装调试,确保顺利运行。
    59 17
    |
    14天前
    |
    缓存 安全 Java
    《从头开始学java,一天一个知识点》之:字符串处理:String类的核心API
    🌱 **《字符串处理:String类的核心API》一分钟速通!** 本文快速介绍Java中String类的3个高频API:`substring`、`indexOf`和`split`,并通过代码示例展示其用法。重点提示:`substring`的结束索引不包含该位置,`split`支持正则表达式。进一步探讨了String不可变性的高效设计原理及企业级编码规范,如避免使用`new String()`、拼接时使用`StringBuilder`等。最后通过互动解密游戏帮助读者巩固知识。 (上一篇:《多维数组与常见操作》 | 下一篇预告:《输入与输出:Scanner与System类》)
    44 11
    |
    7天前
    |
    安全 IDE Java
    重学Java基础篇—Java Object类常用方法深度解析
    Java中,Object类作为所有类的超类,提供了多个核心方法以支持对象的基本行为。其中,`toString()`用于对象的字符串表示,重写时应包含关键信息;`equals()`与`hashCode()`需成对重写,确保对象等价判断的一致性;`getClass()`用于运行时类型识别;`clone()`实现对象复制,需区分浅拷贝与深拷贝;`wait()/notify()`支持线程协作。此外,`finalize()`已过时,建议使用更安全的资源管理方式。合理运用这些方法,并遵循最佳实践,可提升代码质量与健壮性。
    18 1
    |
    4天前
    |
    Java
    java常见的集合类有哪些
    Map接口和Collection接口是所有集合框架的父接口: 1. Collection接口的子接口包括:Set接口和List接口 2. Map接口的实现类主要有:HashMap、TreeMap、Hashtable、ConcurrentHashMap以及 Properties等 3. Set接口的实现类主要有:HashSet、TreeSet、LinkedHashSet等 4. List接口的实现类主要有:ArrayList、LinkedList、Stack以及Vector等
    |
    Java
    java学习第七天笔记-方法150-封装2方法使用
    java学习第七天笔记-方法150-封装2方法使用
    82 0
    java学习第七天笔记-方法150-封装2方法使用
    |
    Java
    java学习第六天笔记-方法129-综合联系-飞机票方法封装
    java学习第六天笔记-方法129-综合联系-飞机票方法封装
    75 0
    java学习第六天笔记-方法129-综合联系-飞机票方法封装