ホームページ  >  記事  >  Java  >  Javaの3大機能のカプセル化例を詳しく解説

Javaの3大機能のカプセル化例を詳しく解説

零下一度
零下一度オリジナル
2017-06-25 10:31:391037ブラウズ

- の 3 つの特徴 -

パッケージングは​​文字通りパッケージングの意味として理解され、専門的な点は隠された情報であり、データとデータベースの操作を一緒にパックするための抽象データ型の使用を指します。データは抽象データ型の内部で保護され、内部の詳細は可能な限り隠蔽され、外部と接続するための一部の外部インターフェイスのみが保持されます。システム内の他のオブジェクトは、データの外部にラップされた承認された操作を通じてのみ、このカプセル化されたオブジェクトと通信および対話できます。つまり、ユーザーはオブジェクトの内部詳細を知る必要はありません(もちろん知る方法はありません)が、ユーザーはオブジェクトが提供するインターフェースを通じてオブジェクトにアクセスできます。

カプセル化の場合、オブジェクトは独自のプロパティとメソッドをカプセル化するため、他のオブジェクトに依存せずに独自の操作を完了できます。 off Off 1.結合により削減される適切なカプセル化。

2. クラス内の構造は自由に変更できます。

3. メンバーをより正確に制御できます。

4. 情報を非表示にし、詳細を実装します。 ✨ − − getter() メソッド。その理由については、誰もが知っていると思いますが、男性は妻を奥深い家に隠しますし、女性は自分の年齢を他人に知られることを望みません。

したがって、カプセル化はオブジェクトのプロパティをプライベート化し、外部のメソッドからアクセスされたくない場合は、外部のアクセス用のメソッドを提供する必要はありません。ただし、クラスが外部アクセス用のメソッドを提供しない場合、このクラスは意味がありません。たとえば、ソファ、テレビシリーズ、エアコン、ティーテーブルなど、家の中にある美しい装飾品は家の私有財産です。しかし、それらの壁がなければ。ブロックしても、他の人は一目でそれを見ることができますか? 何も残らない場合はどうなりますか?プライバシーはまったくありません!その遮蔽壁があれば、私たちは自分だけのプライバシーを確​​保でき、他人に影響を与えることなく室内の家具を自由に変更できます。しかし、ドアや窓がない場合、しっかりと包まれた黒い箱には何の意味があるのでしょうか?そのため、他人もドアや窓を通して室内の景色を見ることができます。したがって、ドアと窓は、アクセスのために外界に残された家のオブジェクトのインターフェイスです。

これでは、カプセル化の利点を実際に理解することはできません。ここで、プログラムの観点からカプセル化の利点を分析します。カプセル化を使用しない場合、オブジェクトには setter() と getter() がありません。その場合、夫クラスは次のように記述する必要があります。次のように:

public class Husband {
    
    /*
     * 对属性的封装
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性
     */
    private String name ;
    private String sex ;
    private int age ;
    private Wife wife;
    
    /*
     * setter()、getter()是该对象对外开发的接口
     */
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setWife(Wife wife) {
        this.wife = wife;
    }
}
しかし、その日の夫を変更する必要がある場合、たとえば、年齢を文字列型に変更する必要がある場合はどうすればよいでしょうか?このクラスを 1 か所でのみ使用するのは問題ありませんが、そのような場所が数十、さらには数百ある場合、クラッシュに変更しますか?カプセル化が使用されている場合は、変更を加える必要はありません。Housand クラスの setAge() メソッドをわずかに変更するだけです。 Javaの3大機能のカプセル化例を詳しく解説
Javaの3大機能のカプセル化例を詳しく解説
public class Husband {
    
    /*
     * 对属性的封装
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性
     */
    private String name ;
    private String sex ;
    private String age ;    /* 改成 String类型的*/
    private Wife wife;
    
    public String getAge() {
        return age;
    }
    
    public void setAge(int age) {
        //转换即可
        this.age = String.valueOf(age);
    }
    
    /** 省略其他属性的setter、getter **/
    
}
Javaの3大機能のカプセル化例を詳しく解説

      其他的地方依然那样引用(husband.setAge(22))保持不变。

      到了这里我们确实可以看出,封装确实可以使我们容易地修改类的内部实现,而无需修改使用了该类的客户代码。

      我们在看这个好处:可以对成员变量进行更精确的控制。

      还是那个Husband,一般来说我们在引用这个对象的时候是不容易出错的,但是有时你迷糊了,写成了这样:

Husband husband = new Husband();
        husband.age = 300;

      也许你是因为粗心写成了,你发现了还好,如果没有发现那就麻烦大了,逼近谁见过300岁的老妖怪啊!

      但是使用封装我们就可以避免这个问题,我们对age的访问入口做一些控制(setter)如:

Javaの3大機能のカプセル化例を詳しく解説
public class Husband {
    
    /*
     * 对属性的封装
     * 一个人的姓名、性别、年龄、妻子都是这个人的私有属性
     */
    private String name ;
    private String sex ;
    private int age ;    /* 改成 String类型的*/
    private Wife wife;

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        if(age > 120){
            System.out.println("ERROR:error age input....");    //提示錯誤信息
        }else{
            this.age = age;
        }
        
    }
    
    /** 省略其他属性的setter、getter **/
    
}
Javaの3大機能のカプセル化例を詳しく解説

      上面都是对setter方法的控制,其实通过使用封装我们也能够对对象的出口做出很好的控制。例如性别我们在数据库中一般都是已1、0方式来存储的,但是在前台我们又不能展示1、0,这里我们只需要在getter()方法里面做一些转换即可。

Javaの3大機能のカプセル化例を詳しく解説
public String getSexName() {
        if("0".equals(sex)){
            sexName = "女";
        }
        else if("1".equals(sex)){
            sexName = "男";
        }
        else{
            sexName = "人妖???";
        }
        return sexName;
    }
Javaの3大機能のカプセル化例を詳しく解説

      在使用的时候我们只需要使用sexName即可实现正确的性别显示。同理也可以用于针对不同的状态做出不同的操作。

Javaの3大機能のカプセル化例を詳しく解説
public String getCzHTML(){
        if("1".equals(zt)){
            czHTML = "<a>启用</a>";
        }
        else{
            czHTML = "<a>禁用</a>";
        }
        return czHTML;
    }
Javaの3大機能のカプセル化例を詳しく解説

      鄙人才疏学浅,只能领悟这么多了,如果文中有错误之处,望指正,鄙人不胜感激!

以上がJavaの3大機能のカプセル化例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。