Java カプセル化
Java カプセル化
このチュートリアルでは、例を使用して、Java でのカプセル化とデータ隠蔽について学習します。
Java カプセル化
カプセル化は、オブジェクト指向プログラミングの重要な機能の 1 つです。カプセル化とは、単一のクラス内のフィールドとメソッドのバンドルを指します。
外部クラスがクラスのフィールドやメソッドにアクセスして変更するのを防ぎます。これは、データ隠蔽の実現にも役立ちます .
例 1:Java カプセル化
class Area {
// fields to calculate area
int length;
int breadth;
// constructor to initialize values
Area(int length, int breadth) {
this.length = length;
this.breadth = breadth;
}
// method to calculate area
public void getArea() {
int area = length * breadth;
System.out.println("Area: " + area);
}
}
class Main {
public static void main(String[] args) {
// create object of Area
// pass value of length and breadth
Area rectangle = new Area(5, 6);
rectangle.getArea();
}
}
出力
Area: 30
上記の例では、Area という名前のクラスを作成しました。 .このクラスの主な目的は、面積を計算することです。
面積を計算するには、2 つの変数が必要です:長さ そして広さ およびメソッド:getArea()
.したがって、これらのフィールドとメソッドを 1 つのクラスにまとめました。
ここで、フィールドとメソッドは他のクラスからもアクセスできます。したがって、これはデータの隠蔽ではありません .
これは単なるカプセル化です .同様のコードをまとめているだけです。
注意 :カプセル化はデータの隠蔽と見なされることがよくありますが、それは完全に真実ではありません。
カプセル化とは、関連するフィールドとメソッドをまとめることです。これは、データの隠蔽を実現するために使用できます。カプセル化自体はデータの隠蔽ではありません。
カプセル化する理由
- Java では、カプセル化によって関連するフィールドとメソッドをまとめて保持できるため、コードがよりクリーンで読みやすくなります。
- データ フィールドの値を制御するのに役立ちます。たとえば、
class Person { private int age; public void setAge(int age) { if (age >= 0) { this.age = age; } } }
ここでは、age を作成しています。 変数private
setAge()
内にロジックを適用する 方法。今、年齢 負にすることはできません。 - ゲッター メソッドとセッター メソッドは読み取り専用を提供します または書き込み専用 クラスフィールドへのアクセス。たとえば、
getName() // provides read-only access setName() // provides write-only access
- システムのコンポーネントを分離するのに役立ちます。たとえば、コードを複数のバンドルにカプセル化できます。
これらの分離されたコンポーネント (バンドル) は、独立して同時に開発、テスト、およびデバッグできます。また、特定のコンポーネントを変更しても、他のコンポーネントには影響しません。 - カプセル化を使用してデータの隠蔽を実現することもできます。上記の例では、長さと幅の変数をプライベートに変更すると、これらのフィールドへのアクセスが制限されます。
そして、それらは外部クラスから隠されています。これはデータの隠蔽と呼ばれます .
データ隠蔽
データ隠蔽は、実装の詳細を隠すことによってデータ メンバーのアクセスを制限する方法です。カプセル化は、データを隠す方法も提供します。
アクセス修飾子を使用して、データの隠蔽を実現できます。たとえば、
例 2:プライベート指定子を使用したデータの隠蔽
class Person {
// private field
private int age;
// getter method
public int getAge() {
return age;
}
// setter method
public void setAge(int age) {
this.age = age;
}
}
class Main {
public static void main(String[] args) {
// create an object of Person
Person p1 = new Person();
// change age using setter
p1.setAge(24);
// access age using getter
System.out.println("My age is " + p1.getAge());
}
}
出力
My age is 24
上記の例では、private
があります。 フィールド age . private
なので 、クラス外からはアクセスできません。
年齢にアクセスするには 、 public
を使用しました メソッド:getAge()
そして setAge()
.これらのメソッドは getter および setter メソッドと呼ばれます。
年齢を作る private により、クラス外からの不正アクセスを制限することができました。これはデータの隠蔽です .
age にアクセスしようとすると Main のフィールド クラスでは、エラーが発生します。
// error: age has private access in Person
p1.age = 24;
Java