アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?

王林
リリース: 2023-04-23 12:52:15
転載
1161 人が閲覧しました

    1. カプセル化

    カプセル化は、オブジェクト指向プログラムの 3 つの主要な特徴の 1 つです;オブジェクト指向プログラムの 3 つの主要な特徴: カプセル化、継承、多重化の状態。

    カプセル化: データとデータを操作するメソッドを有機的に組み合わせ、オブジェクトのプロパティと実装の詳細を隠し、オブジェクトと対話するインターフェイスのみを公開します (簡単に言えば、シェルです)シールドの詳細)。

    実際のオブジェクトを使用して、コンピューターなどのパッケージングを理解します。

    コンピューターのような複雑なデバイスの場合、ユーザーに提供されるのは、電源のオンとオフ、キーボード、ディスプレイ、USB ジャックなどを介して入力することで、ユーザーがコンピュータを操作して日常業務を完了できるようになります。

    しかし実際には、コンピュータの実際の仕事は、CPU、グラフィックス カード、メモリ、その他のハードウェア コンポーネントです。コンピュータ ユーザーは、マザーボード上の回路がどのようにレイアウトされているか、CPU がどのように設計されているかなど、内部コア コンポーネントについて心配する必要はありません。ユーザーが知っていればよいのは、コンピュータの電源を入れる方法とその方法だけです。キーボードとマウスを介してコンピュータと対話します。したがって、コンピューター製造業者は工場から出荷されるとき、内部実装の詳細を隠すために外側にシェルを置き、ユーザーがコンピューターを操作できるように電源スイッチ、マウス、キーボード ジャックのみを提供します。 2. アクセス修飾子 (修飾子)

    カプセル化は主に Java のクラスとアクセス許可によって実現されます:

    クラスはデータとデータをカプセル化するメソッドを組み合わせることができます

    、詳細はインラインで アクセス許可は、クラス、クラス内のメソッド、またはフィールドをクラス の外部で直接使用できるかどうかを制御するために使用されます。 Java には 4 つのアクセス修飾子が用意されています。

    アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?public: 公開、人の外見の特徴として理解でき、誰でも見ることができます。

    # protected: 保護されており、知識が含まれます。相続については、相続ブログで詳しく紹介されています。

    default: 何も書き込まないときのデフォルトの権限です。(同じパッケージ内の) 自分の家族にとっては秘密ではありません。他人にとってはプライバシーです

    private: プライベート、あなただけが知っており、他の人は知りません

    以下のコード例を通じてカプセル化を理解してください:

    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());
        }
    }
    ログイン後にコピー
    一般に、メンバー変数は設定されますプライベートに設定され、メンバー メソッドはパブリックに設定されます。この例を通じて、カプセル化をよりよく理解できます。ここでは、クラス内の実装の詳細は非表示/カプセル化され、一部のみが外部に提供されます。パブリック メソッドは他のユーザーにアクセス可能です。

    [アクセス修飾子のシナリオを使用する]:

    クラスができる限り「カプセル化」されることを望みます。内部実装の詳細は非表示にする必要があり、必要な情報のみがクラスの呼び出し元に公開されます。
    • したがって、これを使用する場合は、可能な限り厳格なアクセス許可を使用する必要があります。 , if a method can be private, then Try not to use public.
    • さらに、すべてのフィールドをプライベートに設定し、すべてのメソッドをパブリックに設定するという単純かつ粗雑な方法もあります。 , このメソッドはアクセス権の乱用に当たりますが、コードを書くときにクラスが提供するフィールドメソッドが「誰に」使用されるのか(クラス自体が使用するのか、クラスの呼び出し元が使用するのか、またはサブクラス別)
    • 3. パッケージ
    1. パッケージの概念

    オブジェクト指向システムにおけるソフトウェア パッケージの概念

    管理を改善するために、クラスは複数のクラスを 1 つのグループにまとめ、ソフトウェア パッケージと呼ばれます

    。ディレクトリに似ています。例: コンピューター上の画像をより適切に管理するには、同じ属性を持つ画像を同じファイルに配置するか、特定のフォルダー内の画像をより詳細に分類することもできます。

    パッケージは Java にも導入されています。アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?パッケージは、クラス、インターフェイスなどのカプセル化メカニズムを具体化したものであり、クラスをパッケージ化する良い方法です。組織メソッド

    、例: 1 つのパッケージ内のクラスが、他のパッケージ内のクラスによって使用されることを望まない。パッケージも重要な役割を果たします。

    同じ名前のクラスは、異なるパッケージ内にある限り、同じプロジェクト内に存在することが許可されます 2. パッケージ内のクラスのインポート

    2.1 インポート メソッド 1

    Java には、使用できる既製のクラスが多数用意されています。たとえば、Date クラス: use
    java.util.Date
    java.util パッケージの Date クラスをインポートします。

    public class Test1 {
        public static void main(String[] args) {
            java.util.Date date = new java.util.Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    ログイン後にコピー
    2.2 メソッド 2 をインポートします

    しかし、この書き方はさらに面倒です。 can
    use it インポート ステートメント import package

    import java.util.Date;
    public class Test1 {
        public static void main(String[] args) {
            Date date = new Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    ログイン後にコピー
    2.3 インポート メソッド 3

    java.util で他のクラスを使用する必要がある場合は、
    import java を使用できます。 .util.*
    , ここで java.util パッケージ内のすべてのクラスをインポートできますが、すべてのクラスを一度にインポートしないように注意してください。コード内で使用されているものがインポートされます。

    import java.util.*;
    public class Test1 {
        public static void main(String[] args) {
            Date date = new Date();
            // 得到一个毫秒级别的时间戳
            System.out.println(date.getTime());
        }
    }
    ログイン後にコピー
    ただし、 インポートするクラス名を明示的に指定することをお勧めします

    .

    そうしないと、依然として競合 が発生しやすくなります。

    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 -> 新建 -> 包

    アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?

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

    アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?

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

    アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?

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

    アクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?

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

    アクセス修飾子とパッケージを使用して 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("上网~~~");
        }
    }
    ログイン後にコピー

    アクセス修飾子とパッケージを使用して 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编程开发包。

    以上がアクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    関連ラベル:
    ソース:yisu.com
    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
    人気のチュートリアル
    詳細>
    最新のダウンロード
    詳細>
    ウェブエフェクト
    公式サイト
    サイト素材
    フロントエンドテンプレート