Javaオブジェクト指向パッケージングおよび関連する知識の収集
1.カプセル化
1.カプセル化の関連概念
- オブジェクト指向プログラミング手法では、カプセル化とは1つの種類を指し
将抽象性函式接口的实现细节部分包装、隐藏起来的方法
ます。
カプセル化は保護バリアと考えることができます防止该类的代码和数据被外部类定义的代码随机访问
。
このタイプのコードとデータにアクセスするには、厳密なインターフェイス制御を渡す必要があります。
カプセル化の主な機能は、コードを呼び出すプログラムフラグメントを変更せずに、独自の実装コードを変更できることです。
适当的封装
コードを作成できますが、コード更容易理解与维护
も作成でき加强了
ます安全性
。1
2.パッケージングの利点
- 良い包装は結合を減らすことができます。
- クラスの内部構造は自由に変更できます。
- メンバー変数をより正確に制御できます。
- 隠された情報、実装の詳細。
3.カプセル化の実現手順
1.属性のアクセス許可をプライベートとして変更します
public class Person {
private String name;
private int age;
}
2.属性设置为private(私有)
その後、属性只能在本类中访问
や他のクラスにアクセスできなくなるため、情報の隠蔽が実現します。必要に応じ使其它类继续访问
て私有財産でなければなりません添加setter和getter方法
。
public class Person{
private String name;
private int age;
public void setAge(int age){
this.age = age;
//this.属性 指的是成员变量
//this关键字可以解决成员变量和局部变量重名冲突问题
}
public int getAge(){
return age;
}
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
}
3. Personクラスを使用して、新しいテストクラスPersonTestクラスを作成し、Personクラス内のプライベートに変更されたメンバー変数に他のクラスを介してアクセスする方法を説明します。
public class PersonTest {
public static void main(String[] args) {
//创建对象Person类的对象
Person p = new Person();
//使用对象名.setter方法对成员变量赋值
p.setName("李四");
p.setAge(18);
//使用对象名.getter方法取出成员变量的值
System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
}
}
プログラムの結果は次のとおりです。
姓名:李四,年龄:18
【チップ】
この方法も一種のカプセル化です。
2つのプライベートキーワード
1.プライベートの役割
- メンバー変数とメンバーメソッドを変更するために使用される権限修飾子です。
- Privateはクラス用であり、オブジェクト用ではありません。
- 民営化されたメンバーは、このクラスでのみ有効です。
2.プライベートユースケース
public class Person {
// String name;
// int age;
private String name;
private int age;
}
privateによって変更された後、メンバー変数はこのクラスで直接使用でき、setterメソッドとgetterメソッドは他のクラスで使用する必要があります
public static void main(String[] args) {
System.out.println("姓名:"+name+'\n'+"年龄:"+age);
}
setter方法
必須有参数
であり、タイプはメンバー変数と一致しています
getter方法
必須有返回值
であり、戻り値の型はメンバー変数と一致しています
public void setName(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setAge(int age) {
this.age = age;
}
public int getAge(){
return age;
}
【チップ】
データの合理性は、setterメソッドとgetterメソッドで定義できます。
たとえば、年齢値の合理性は、setAge()で定義できます。
public void setAge(int age) {
if (age >= 0 && age <120) {
this.age = age;
}else{
System.out.println("数据不合理!");
}
}
他のクラスのPersonクラスでプライベート変更変数を使用する
public class PersonTest {
public static void main(String[] args) {
//创建对象Person类的对象
Person p = new Person();
//使用对象名.setter方法对成员变量赋值
p.setName("李四");
p.setAge(20);
//使用对象名.getter方法取出成员变量的值
System.out.println("姓名:"+p.getName()+",年龄:"+p.getAge());
}
}
プログラムの結果は次のとおりです。
姓名:李四,年龄:20
三、このキーワード
1.これの適用範囲
1.このキーワード
指向
は当前对象的引用
2です。このキーワードの使用は在方法内部
3でなければなりません。これ不能用于静态方法
2.このキーワードの使用
変数
メソッドのローカル変数とメンバー変数が同じ名前の場合、ローカル変数が最初に使用されます(近接の原則)
this。属性を使用します。これは、メンバー変数の使用を意味します。
public class Person {
private String name;
public void setName(String name){
this.name = name;
}
}
方法
(1)this。
このクラスのメンバーメソッドへのメソッド名アクセス
(2)This()
は、このクラスの構築メソッドにアクセスします。
注:
- 1.()にパラメータがある場合、パラメータがある場合、指定されたパラメータ構造が呼び出されます
- 2.this()はコンストラクターでのみ記述できます
- 3.構築方法の最初のステートメントである必要があります
四、工法
構築メソッドは、オブジェクトを作成するために特別に使用されるメソッドです。キーワード
new来创建对象时
が渡されると、それは是调用构造方法
です。
工法定義フォーマット:
public 类名称([参数类型 参数名称,参数类型 参数名称,...]){
//参数可有可无
//参数个数和类型可以根据需要定义
方法体;
}
名前は、それが含まれるクラスの名前と完全に同じである必要があります。
戻り値の型はありません。
コンパイラーには、デフォルトで引数なしのコンストラクターがあります。
少なくとも1つのコンストラクターが作成されると、デフォルトの引数なしのコンストラクターは表示されなくなります。
5つ目は、標準クラスを定義する(Java Bean)
1.標準クラスの構成
所有成员变量
すべて使用private关键字修饰
每一个成员变量都需要有setter和getter方法
- 書く
一个无参构造方法
- 書く
一个全参构造方法
2.標準クラスの例
import java.util.Date;
public class Person {
private String name;
private String sex;
private Date birthday;
private int age;
//无参构造方法
public Person() {
}
//全参构造方法
public Person(String name, String sex, Date birthday, int age) {
this.name = name;
this.sex = sex;
this.birthday = birthday;
this.age = age;
}
//setter和getter方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//setter和getter方法
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
//setter和getter方法
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
this.birthday = birthday;
}
//setter和getter方法
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}