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

    目录
    相关文章
    |
    1月前
    |
    Java 开发者
    在 Java 中,一个类可以实现多个接口吗?
    这是 Java 面向对象编程的一个重要特性,它提供了极大的灵活性和扩展性。
    149 57
    |
    4天前
    |
    JSON Java Apache
    Java基础-常用API-Object类
    继承是面向对象编程的重要特性,允许从已有类派生新类。Java采用单继承机制,默认所有类继承自Object类。Object类提供了多个常用方法,如`clone()`用于复制对象,`equals()`判断对象是否相等,`hashCode()`计算哈希码,`toString()`返回对象的字符串表示,`wait()`、`notify()`和`notifyAll()`用于线程同步,`finalize()`在对象被垃圾回收时调用。掌握这些方法有助于更好地理解和使用Java中的对象行为。
    |
    1月前
    |
    存储 缓存 安全
    java 中操作字符串都有哪些类,它们之间有什么区别
    Java中操作字符串的类主要有String、StringBuilder和StringBuffer。String是不可变的,每次操作都会生成新对象;StringBuilder和StringBuffer都是可变的,但StringBuilder是非线程安全的,而StringBuffer是线程安全的,因此性能略低。
    54 8
    |
    1月前
    |
    Java Android开发
    Eclipse 创建 Java 包
    Eclipse 创建 Java 包
    33 1
    |
    1月前
    |
    安全 Java
    Java多线程集合类
    本文介绍了Java中线程安全的问题及解决方案。通过示例代码展示了使用`CopyOnWriteArrayList`、`CopyOnWriteArraySet`和`ConcurrentHashMap`来解决多线程环境下集合操作的线程安全问题。这些类通过不同的机制确保了线程安全,提高了并发性能。
    |
    1月前
    |
    存储 Java 程序员
    Java基础的灵魂——Object类方法详解(社招面试不踩坑)
    本文介绍了Java中`Object`类的几个重要方法,包括`toString`、`equals`、`hashCode`、`finalize`、`clone`、`getClass`、`notify`和`wait`。这些方法是面试中的常考点,掌握它们有助于理解Java对象的行为和实现多线程编程。作者通过具体示例和应用场景,详细解析了每个方法的作用和重写技巧,帮助读者更好地应对面试和技术开发。
    135 4
    |
    1月前
    |
    Java Android开发
    Eclipse 创建 Java 类
    Eclipse 创建 Java 类
    29 0
    |
    Java
    java学习第七天笔记-方法150-封装2方法使用
    java学习第七天笔记-方法150-封装2方法使用
    73 0
    java学习第七天笔记-方法150-封装2方法使用
    |
    Java
    java学习第六天笔记-方法129-综合联系-飞机票方法封装
    java学习第六天笔记-方法129-综合联系-飞机票方法封装
    66 0
    java学习第六天笔记-方法129-综合联系-飞机票方法封装