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

    目录
    相关文章
    |
    3月前
    |
    存储 Java 索引
    用Java语言实现一个自定义的ArrayList类
    自定义MyArrayList类模拟Java ArrayList核心功能,支持泛型、动态扩容(1.5倍)、增删改查及越界检查,底层用Object数组实现,适合学习动态数组原理。
    165 4
    |
    3月前
    |
    IDE JavaScript Java
    在Java 11中,如何处理被弃用的类或接口?
    在Java 11中,如何处理被弃用的类或接口?
    243 5
    |
    3月前
    |
    JSON 网络协议 安全
    【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
    几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
    239 1
    |
    3月前
    |
    Java Go 开发工具
    【Java】(8)正则表达式的使用与常用类分享
    正则表达式定义了字符串的模式。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
    290 1
    |
    3月前
    |
    存储 Java 程序员
    【Java】(6)全方面带你了解Java里的日期与时间内容,介绍 Calendar、GregorianCalendar、Date类
    java.util 包提供了 Date 类来封装当前的日期和时间。Date 类提供两个构造函数来实例化 Date 对象。第一个构造函数使用当前日期和时间来初始化对象。Date( )第二个构造函数接收一个参数,该参数是从1970年1月1日起的毫秒数。
    233 0
    |
    3月前
    |
    JSON 网络协议 安全
    【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
    几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
    256 1
    Java复习与学习笔记----封装
    Java复习与学习笔记----封装
    |
    Java
    java学习第七天笔记-方法150-封装2方法使用
    java学习第七天笔记-方法150-封装2方法使用
    115 0
    java学习第七天笔记-方法150-封装2方法使用
    |
    Java
    java学习第六天笔记-方法129-综合联系-飞机票方法封装
    java学习第六天笔记-方法129-综合联系-飞机票方法封装
    100 0
    java学习第六天笔记-方法129-综合联系-飞机票方法封装