カプセル化は、オブジェクト指向プログラムの 3 つの主要な特徴の 1 つです;オブジェクト指向プログラムの 3 つの主要な特徴: カプセル化、継承、多重化の状態。
カプセル化: データとデータを操作するメソッドを有機的に組み合わせ、オブジェクトのプロパティと実装の詳細を隠し、オブジェクトと対話するインターフェイスのみを公開します (簡単に言えば、シェルです)シールドの詳細)。
実際のオブジェクトを使用して、コンピューターなどのパッケージングを理解します。
コンピューターのような複雑なデバイスの場合、ユーザーに提供されるのは、電源のオンとオフ、キーボード、ディスプレイ、USB ジャックなどを介して入力することで、ユーザーがコンピュータを操作して日常業務を完了できるようになります。
しかし実際には、コンピュータの実際の仕事は、CPU、グラフィックス カード、メモリ、その他のハードウェア コンポーネントです。コンピュータ ユーザーは、マザーボード上の回路がどのようにレイアウトされているか、CPU がどのように設計されているかなど、内部コア コンポーネントについて心配する必要はありません。ユーザーが知っていればよいのは、コンピュータの電源を入れる方法とその方法だけです。キーボードとマウスを介してコンピュータと対話します。したがって、コンピューター製造業者は工場から出荷されるとき、内部実装の詳細を隠すために外側にシェルを置き、ユーザーがコンピューターを操作できるように電源スイッチ、マウス、キーボード ジャックのみを提供します。 2. アクセス修飾子 (修飾子)
、詳細はインラインで アクセス許可は、クラス、クラス内のメソッド、またはフィールドをクラス の外部で直接使用できるかどうかを制御するために使用されます。 Java には 4 つのアクセス修飾子が用意されています。
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()); } }
[アクセス修飾子のシナリオを使用する]:
クラスができる限り「カプセル化」されることを望みます。内部実装の詳細は非表示にする必要があり、必要な情報のみがクラスの呼び出し元に公開されます。
パッケージは Java にも導入されています。パッケージは、クラス、インターフェイスなどのカプセル化メカニズムを具体化したものであり、クラスをパッケージ化する良い方法です。組織メソッド
、例: 1 つのパッケージ内のクラスが、他のパッケージ内のクラスによって使用されることを望まない。パッケージも重要な役割を果たします。同じ名前のクラスは、異なるパッケージ内にある限り、同じプロジェクト内に存在することが許可されます 。 2. パッケージ内のクラスのインポート
2.1 インポート メソッド 1Java には、使用できる既製のクラスが多数用意されています。たとえば、Date クラス: usepublic class Test1 { public static void main(String[] args) { java.util.Date date = new java.util.Date(); // 得到一个毫秒级别的时间戳 System.out.println(date.getTime()); } }
2.2 メソッド 2 をインポートします
しかし、この書き方はさらに面倒です。 canimport java.util.Date; public class Test1 { public static void main(String[] args) { Date date = new Date(); // 得到一个毫秒级别的时间戳 System.out.println(date.getTime()); } }
import java.util.*; public class Test1 { public static void main(String[] args) { Date date = new Date(); // 得到一个毫秒级别的时间戳 System.out.println(date.getTime()); } }
ただし、
インポートするクラス名を明示的に指定することをお勧めします . そうしないと、依然として競合 が発生しやすくなります。 在这种情况下需要使用完整的类名 在文件的最上方加上一个 package 语句指定该代码在哪个包中. 包名需要尽量指定成唯一的名字, 通常会用公司域名的颠倒形式(例如com.bat.demo1 ). 包名要和代码路径相匹配. 例如创建 com.bat.demo1 的包, 那么会存在一个对应的路径 com/bat/demo1 来存储代码 如果一个类没有 package 语句, 则该类被放到一个默认包中 在 IDEA 中先新建一个包: 右键 src -> 新建 -> 包 在弹出的对话框中输入包名, 例如 com.bat.demo1 ,敲入回车即可 在包中创建类, 右键包名 -> 新建 -> 类, 然后输入类名回车即可. 此时可以看到我们的磁盘上的目录结构已经被 IDEA 自动创建出来了 同时我们也看到了, 在新创建的 Test.java 文件的最上方, 就出现了一个 package 语句 Computer类位于com.bat.demo1包中,TestComputer位置com.bat.demo2包中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 基本使用规则:
3.2 IDEA中创键自定义包
4. 不同包中的访问权限控制
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("上网~~~");
}
}
注意:如果去掉Computer类之前的public修饰符,Computer类为默认权限,只能在同一包中访问,代码也会编译失败
java.lang:系统常用基础类(String、Object),此包从JDK1.1后自动导入。
java.lang.reflect:java 反射编程包;
java.net:进行网络编程开发包。
java.sql:进行数据库开发的支持包。
java.util:是java提供的工具程序包;(集合类等) 非常重要
java.io:I/O编程开发包。
以上がアクセス修飾子とパッケージを使用して Java でカプセル化を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。