类的封装和包(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

    目录
    相关文章
    |
    4天前
    |
    自然语言处理 Java API
    Java 8的Stream API和Optional类:概念与实战应用
    【5月更文挑战第17天】Java 8引入了许多重要的新特性,其中Stream API和Optional类是最引人注目的两个。这些特性不仅简化了集合操作,还提供了更好的方式来处理可能为空的情况,从而提高了代码的健壮性和可读性。
    26 7
    |
    4天前
    |
    JSON Java 数据安全/隐私保护
    java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
    java中的http请求的封装(GET、POST、form表单、JSON形式、SIGN加密形式)
    |
    2天前
    |
    安全 Java 容器
    Java一分钟之-并发编程:线程安全的集合类
    【5月更文挑战第19天】Java提供线程安全集合类以解决并发环境中的数据一致性问题。例如,Vector是线程安全但效率低;可以使用Collections.synchronizedXxx将ArrayList或HashMap同步;ConcurrentHashMap是高效线程安全的映射;CopyOnWriteArrayList和CopyOnWriteArraySet适合读多写少场景;LinkedBlockingQueue是生产者-消费者模型中的线程安全队列。注意,过度同步可能影响性能,应尽量减少共享状态并利用并发工具类。
    17 2
    |
    5天前
    |
    设计模式 算法 Java
    Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
    Java的前景如何,好不好自学?,万字Java技术类校招面试题汇总
    |
    6天前
    |
    Java 编译器 Shell
    Java 包(package)
    5月更文挑战第8天
    |
    6天前
    |
    安全 Java 开发者
    Java一分钟之-文件与目录操作:Path与Files类
    【5月更文挑战第13天】Java 7 引入`java.nio.file`包,`Path`和`Files`类提供文件和目录操作。`Path`表示路径,不可变。`Files`包含静态方法,支持创建、删除、读写文件和目录。常见问题包括:忽略异常处理、路径解析错误和权限问题。在使用时,注意异常处理、正确格式化路径和考虑权限,以保证代码稳定和安全。结合具体需求,这些方法将使文件操作更高效。
    11 2
    |
    6天前
    |
    安全 Java 开发者
    Java一分钟之-Optional类:优雅处理null值
    【5月更文挑战第13天】Java 8的`Optional`类旨在减少`NullPointerException`,提供优雅的空值处理。本文介绍`Optional`的基本用法、创建、常见操作,以及如何避免错误,如直接调用`get()`、误用`if (optional != null)`检查和过度使用`Optional`。正确使用`Optional`能提高代码可读性和健壮性,建议结合实际场景灵活应用。
    22 3
    |
    6天前
    |
    Java
    【Java开发指南 | 第三十一篇】Java 包(package)
    【Java开发指南 | 第三十一篇】Java 包(package)
    13 1
    |
    9月前
    |
    Java
    Java复习与学习笔记----封装
    Java复习与学习笔记----封装
    |
    Java
    java学习第七天笔记-方法150-封装2方法使用
    java学习第七天笔记-方法150-封装2方法使用
    54 0
    java学习第七天笔记-方法150-封装2方法使用