Maison  >  Article  >  Java  >  Comment utiliser les qualificatifs d'accès et les packages pour implémenter l'encapsulation en Java ?

Comment utiliser les qualificatifs d'accès et les packages pour implémenter l'encapsulation en Java ?

王林
王林avant
2023-04-23 12:52:151104parcourir

    1. Encapsulation

    L'encapsulation est l'une des trois caractéristiques majeures des programmes orientés objet Les trois caractéristiques majeures des programmes orientés objet : l'encapsulation, l'héritage et le polymorphisme ;

    Encapsulation : combinez organiquement les données et les méthodes d'exploitation des données, masquez les propriétés et les détails d'implémentation de l'objet et exposez uniquement l'interface pour interagir avec l'objet (en termes simples, il s'agit d'un shell pour protéger les détails).

    Utilisez des objets réels de la vie pour comprendre l'emballage, comme les ordinateurs :

    Pour un appareil complexe comme un ordinateur, tout ce qui est fourni à l'utilisateur est : la mise sous tension et hors tension, la saisie au clavier, le moniteur, la prise USB, etc. , permettant à l'utilisateur d'interagir avec les ordinateurs pour accomplir les tâches quotidiennes.

    Mais en fait : le véritable travail de l'ordinateur est le processeur, la carte graphique, la mémoire et les autres composants matériels. Pour les utilisateurs d'ordinateurs, ils n'ont pas à se soucier des composants internes de base, tels que la disposition des circuits sur la carte mère, la conception du processeur, etc. Les utilisateurs ont seulement besoin de savoir comment allumer l'ordinateur et comment interagir avec l'ordinateur via le clavier et la souris. Par conséquent, lorsque les fabricants d'ordinateurs quittent l'usine, ils mettent une coque à l'extérieur pour cacher les détails d'implémentation internes et ne fournissent que des interrupteurs d'alimentation, des prises pour souris et clavier à l'extérieur afin que les utilisateurs puissent interagir avec l'ordinateur. 2. Qualificateurs d'accès (modificateurs)

    L'encapsulation est principalement réalisée via des classes et des droits d'accès en Java :

    Les classes peuvent combiner des données et des méthodes d'encapsulation de données

    , ce qui est plus conforme à la compréhension humaine des choses, et Autorisations d'accès sont utilisés pour contrôler si une classe, des méthodes ou des champs dans une classe peuvent être utilisés directement en dehors de la classe. Il existe quatre qualificatifs d'accès fournis en Java :

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?public : public, qui peut être compris comme les caractéristiques d'apparence d'une personne, tout le monde peut le voir

    protected : protégé, impliquant des connaissances dans l'héritage, l'héritage Introduction détaillée dans le blog

    par défaut : l'autorisation par défaut lorsque vous n'écrivez rien n'est pas un secret pour votre propre famille (dans le même package), elle est privée pour les autres

    private : privée, vous seul le savez, personne d'autre ne le sait

    Comprenez l'encapsulation via le exemple de code donné ci-dessous :

    class Person {
        private String name;
        //private修饰的成员变量只能在本类中访问
        private int age;
    
        String sex;
        //这里不加修饰符即为默认权限,默认是default权限
    
        public String getName() {
            return name;
        }
        //在其他类中不能直接访问name和age,
        //但可以在本类中提供公开的(public修饰)访问方法和外界进行交互
        //这里就是对成员变量进行了封装
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public void show() {
            System.out.println("姓名:"+name+" 年龄: "+age);
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
            Person person = new Person();
            //person.name = "bit";//不能直接进行访问
            person.setName("XIN-XIANG荣");
            person.setAge(21);
            //通过提供Person类中提供的方法间接进行访问
            System.out.println(person.getName()+" => "+person.getAge());
        }
    }
    Généralement, les variables membres sont définies sur privées et les méthodes membres sont définies sur publiques Grâce à cet exemple, vous pouvez mieux comprendre l'encapsulation, ici Les détails d'implémentation à l'intérieur de la classe sont masqués/encapsulés, et seulement certains. des méthodes publiques sont fournies aux autres utilisateurs.

    [Utiliser des scénarios de qualificatifs d'accès] :

      Nous espérons que la classe sera aussi "encapsulée" que possible, c'est-à-dire masquer les détails d'implémentation internes et exposer uniquement les informations nécessaires à l'appelant de la classe
    • Par conséquent, nous devrions faire de notre mieux pour utiliser des autorisations d'accès plus strictes lors de son utilisation ; par exemple, si une méthode peut être utilisée en privé, essayez de ne pas l'utiliser en public.
    • De plus, il existe une méthode simple et manière grossière : définissez tous les champs sur privé, définissez toutes les méthodes sur public Cependant, cette méthode est un abus des droits d'accès, mais il est préférable de penser à "qui" les méthodes de champ fournies par la classe sont utilisées lors de l'écriture du code ( c'est pour un usage interne de la classe, Qu'il soit utilisé par l'appelant de la classe ou par la sous-classe)
    • 3 Package

    1. Le concept de package

    Dans le système orienté objet, le concept. d'un progiciel est proposé, c'est-à-dire :

    Pour une meilleure gestion de classe, plusieurs classes sont rassemblées dans un groupe, appelé progiciel

    . Un peu similaire à un répertoire. Par exemple : afin de mieux gérer les images sur votre ordinateur, un bon moyen consiste à placer les images avec les mêmes attributs dans le même fichier, ou vous pouvez également classer les images dans un certain dossier de manière plus détaillée.

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?Les packages ont également été introduits en Java

    Les packages sont l'incarnation du mécanisme d'encapsulation des classes, des interfaces, etc., et sont un bon moyen d'organiser des classes ou des interfaces, etc.

    , tels que : des classes dans. un package Ne souhaite pas être utilisé par les classes d'autres packages. Les packages jouent également un rôle important : Les classes portant le même nom sont autorisées à exister dans le même projet, à condition qu'elles se trouvent dans des packages différents. 2. Importer des classes dans le package

    2.1 Méthode d'importation 1

    Java nous a fourni de nombreuses classes prêtes à l'emploi, par exemple la classe Date : vous pouvez utiliser java.util.Date pour importer java .util est la classe Date dans ce package.
    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }

    2.2 Méthode d'importation deux java.util.Date 导入 java.util 这个包中的 Date类.

    import java.util.Date;
    public class Test1 {
        public static void main(String[] args) {
            Date date = new Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    2.2 导入方法二

    但是这种写法比较麻烦一些, 可以使用 import语句导入包

    import java.util.*;
    public class Test1 {
        public static void main(String[] args) {
            Date date = new Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    2.3 导入方法三

    如果需要使用 java.util 中的其他类, 可以使用 import java.util.*

    Mais cette façon d'écrire est plus gênante. Vous pouvez

    utiliser l'instruction import pour importer le package

    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
    // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
            Date date = new Date();
            System.out.println(date.getTime());
        }
    }
    
    // 编译出错
    //Error:(5, 9) java: 对Date的引用不明确
    //java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配
    2.3 Méthode d'importation. trois

    Si vous devez utiliser java.util Pour d'autres classes, vous pouvez utiliser import java.util.* Ici, vous pouvez importer toutes les classes du package java.util, mais veillez à ne pas le faire. importer toutes les classes à la fois. Utiliser Celui qui arrive sera importé. 🎜
    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            System.out.println(date.getTime());
        }
    }
    🎜Mais 🎜 il est plus recommandé de spécifier explicitement le nom de la classe à importer 🎜 🎜Sinon, des conflits 🎜 peuvent facilement survenir.🎜.
    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
    // util 和 sql 中都存在一个 Date 这样的类, 此时就会出现歧义, 编译出错
            Date date = new Date();
            System.out.println(date.getTime());
        }
    }
    
    // 编译出错
    //Error:(5, 9) java: 对Date的引用不明确
    //java.sql 中的类 java.sql.Date 和 java.util 中的类 java.util.Date 都匹配

    在这种情况下需要使用完整的类名

    import java.util.*;
    import java.sql.*;
    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            System.out.println(date.getTime());
        }
    }
    2.4 导入静态的方法和字段
    import static java.lang.Math.*;
    public class Test {
        public static void main(String[] args) {
            double x = 30;
            double y = 40;
    // 静态导入的方式写起来更方便一些.
    // double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
            double result = sqrt(pow(x, 2) + pow(y, 2));
            System.out.println(result);
        }
    }
    
    //对比正常的导入和使用
    import java.lang.Math;
    public class Test1 {
        public static void main(String[] args) {
            double x = 30;
            double y = 40;
            double result = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));
            System.out.println(result);
        }
    }

    3. 自定义包

    3.1 基本使用规则:
    • 在文件的最上方加上一个 package 语句指定该代码在哪个包中.

    • 包名需要尽量指定成唯一的名字, 通常会用公司域名的颠倒形式(例如com.bat.demo1 ).

    • 包名要和代码路径相匹配. 例如创建 com.bat.demo1 的包, 那么会存在一个对应的路径 com/bat/demo1 来存储代码

    • 如果一个类没有 package 语句, 则该类被放到一个默认包中

    3.2 IDEA中创键自定义包

    在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?

    在弹出的对话框中输入包名, 例如 com.bat.demo1 ,敲入回车即可

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?

    在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名回车即可.

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?

    此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?

    同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?

    4. 不同包中的访问权限控制

    Computer类位于com.bat.demo1包中,TestComputer位置com.bat.demo2包中

    package com.bat.demo1;
    
    public class Computer {
        private String cpu; // cpu
        private String memory; // 内存
        public String screen; // 屏幕
        String brand; // 品牌
    
        public Computer(String brand, String cpu, String memory, String screen) {
            this.brand = brand;
            this.cpu = cpu;
            this.memory = memory;
            this.screen = screen;
        }
    
        public void Boot() {
            System.out.println("开机~~~");
        }
    
        public void PowerOff() {
            System.out.println("关机~~~");
        }
    
        public void SurfInternet() {
            System.out.println("上网~~~");
        }
    }

    Comment utiliser les qualificatifs daccès et les packages pour implémenter lencapsulation en Java ?

    注意:如果去掉Computer类之前的public修饰符,Computer类为默认权限,只能在同一包中访问,代码也会编译失败

    5. 常见的包

    • java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。

    • java.lang.reflect:java 反射编程包;

    • java.net:进行网络编程开发包。

    • java.sql:进行数据库开发的支持包。

    • java.util:是java提供的工具程序包;(集合类等) 非常重要

    • java.io:I/O编程开发包。

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer