ホームページ Java &#&チュートリアル Java の改善 第 1 章-----Java の 3 つの主要な特徴のカプセル化を理解する

Java の改善 第 1 章-----Java の 3 つの主要な特徴のカプセル化を理解する

Feb 09, 2017 pm 01:27 PM

2年生の時にJavaに触れてから約3年が経ちました。最も基本的な HTML と CSS から最後の SSH まで、段階的に説明していきましたが、うれしかったり、がっかりしたり、寂しかったりしました。中途半端な僧侶ではあるが、自らの努力で「学問」を完成させた。この間、研修機関に参加しましたが、そのような研修方法があまり好きではなかったので、諦めて独学を選びました(かわいそうに6,000元も払いました) 独学はかなりの苦痛でしたが、それはもっと楽しかったし、努力と成果はあなた自身が知っているだけです。 Huang Tian は努力の甲斐あって、バカですが、4 年生の 1 学期にようやく Java を独学で修了し(途中、遠回りして半年無駄にしましたが)、いい就職をしました。ありがとうございました!

噂が多すぎる!話は変わりますが、LZは最近デザインパターンを読み終えたばかりで、感慨深いものがあります。そして、作業の過程で、Java の基礎が十分にしっかりしていないことを痛感します。たとえば、IO に詳しくなく、ガベージ コレクション、ポリモーフィズム、リフレクションが理解できず、最も基本的な 3 つの機能さえ混乱しています。自分!そこで、Java の基礎を補うことを決意しました。最初のレッスンから始めましょう!!!!!データは抽象データ型の内部で保護され、内部の詳細は可能な限り隠蔽され、外部と接続するための一部の外部インターフェイスのみが保持されます。システム内の他のオブジェクトは、データの外部にラップされた承認された操作を通じてのみ、このカプセル化されたオブジェクトと通信および対話できます。つまり、ユーザーはオブジェクトの内部詳細を知る必要はありません(もちろん知る方法はありません)が、ユーザーはオブジェクトが提供するインターフェースを通じてオブジェクトにアクセスできます。

カプセル化の場合、オブジェクトは独自のプロパティとメソッドをカプセル化するため、他のオブジェクトに依存せずに独自の操作を完了できます。大 パッケージングを使用することには 3 つの大きな利点があります:

1. 適切なパッケージングによりカップリングを減らすことができます。

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

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

4. 情報を非表示にし、詳細を実装します。两 まず第一に、2 つのカテゴリを見てみましょう:夫.java、妻.java

rrreereeeeee

上記 2 つの例から、夫の WIFE 参照が Getter() ではないことがわかります。 WIFE メソッドの Getter () AGE ではありません。理由としては、誰もが知っていることだと思いますが、男は妻を奥に隠しますし、女性は自分の年齢を他人に知られたくないものです。

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

これでは、カプセル化の利点を実際に理解することはできません。ここで、プログラムの観点からカプセル化の利点を分析します。カプセル化を使用しない場合、オブジェクトには 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;  
    }  
}
ログイン後にコピー

次のように使用する必要があります:

public class Wife {  
    private String name;  
    private int age;  
    private String sex;  
    private Husband husband;  
  
    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 void setAge(int age) {  
        this.age = age;  
    }  
  
    public void setHusband(Husband husband) {  
        this.husband = husband;  
    }  
  
    public Husband getHusband() {  
        return husband;  
    }  
      
}
ログイン後にコピー

しかし、必要に応じてその日夫を変更する場合、例えば年齢を変更する場合はString型に変更してみてはいかがでしょうか?このクラスを 1 か所でのみ使用するのは問題ありませんが、そのような場所が数十、さらには数百ある場合、クラッシュに変更しますか?カプセル化が使用されている場合は、変更を加える必要はありません。Housand クラスの setAge() メソッドをわずかに変更するだけです。 }

public class Husband {  
    public String name ;  
    public String sex ;  
    public int age ;  
    public Wife wife;  
}
ログイン後にコピー

他の場所は引き続き (husband.setAge(22)) を変更せずに参照しています。

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

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

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

Husband husband = new Husband();  
husband.age = 300;
ログイン後にコピー

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

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

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 **/  
      
}
ログイン後にコピー

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

public String getSexName() {  
        if("0".equals(sex)){  
            sexName = "女";  
        }  
        else if("1".equals(sex)){  
            sexName = "男";  
        }  
        else{  
            sexName = "人妖???";  
        }  
        return sexName;  
    }
ログイン後にコピー

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

public String getCzHTML(){  
        if("1".equals(zt)){  
            czHTML = "<a href=&#39;javascript:void(0)&#39; onclick=&#39;qy("+id+")&#39;>启用</a>";  
        }  
        else{  
            czHTML = "<a href=&#39;javascript:void(0)&#39; onclick=&#39;jy("+id+")&#39;>禁用</a>";  
        }  
        return czHTML;  
    }
ログイン後にコピー

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

以上就是 java提高篇(一)-----理解java的三大特性之封装的内容,更多相关内容请关注PHP中文网(www.php.cn)!


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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

TrendForce: Nvidia の Blackwell プラットフォーム製品により、TSMC の CoWoS 生産能力は今年 150% 増加します TrendForce: Nvidia の Blackwell プラットフォーム製品により、TSMC の CoWoS 生産能力は今年 150% 増加します Apr 17, 2024 pm 08:00 PM

4月17日の当サイトのニュースによると、TrendForceは最近、Nvidiaの新しいBlackwellプラットフォーム製品に対する需要は強気で、2024年にはTSMCのCoWoSパッケージング総生産能力が150%以上増加すると予想されるレポートを発表した。 NVIDIA Blackwell の新しいプラットフォーム製品には、B シリーズ GPU と、NVIDIA 独自の GraceArm CPU を統合する GB200 アクセラレータ カードが含まれます。 TrendForce は、サプライチェーンが現在 GB200 について非常に楽観的であることを確認しており、2025 年の出荷台数は 100 万台を超え、Nvidia のハイエンド GPU の 40 ~ 50% を占めると予想されています。 Nvidiaは今年下半期にGB200やB100などの製品を提供する予定だが、上流のウェーハパッケージングではさらに複雑な製品を採用する必要がある。

AMD「Strix Halo」FP11のパッケージサイズを公開:Intel LGA1700と同等、Phoenixより60%大きい AMD「Strix Halo」FP11のパッケージサイズを公開:Intel LGA1700と同等、Phoenixより60%大きい Jul 18, 2024 am 02:04 AM

このWebサイトは7月9日、AMD Zen5アーキテクチャの「Strix」シリーズプロセッサには2つのパッケージングソリューションがあり、小型のStrixPointはFP8パッケージを使用し、StrixHaloはFP11パッケージを使用すると報じた。出典: videocardz 出典 @Olrak29_ 最新の事実は、StrixHalo の FP11 パッケージ サイズが 37.5mm*45mm (1687 平方ミリメートル) であり、これは Intel の AlderLake および RaptorLake CPU の LGA-1700 パッケージ サイズと同じであるということです。 AMD の最新の Phoenix APU は、サイズ 25*40mm の FP8 パッケージング ソリューションを使用しています。これは、StrixHalo の F

PHP のパッケージング技術とアプリケーション PHP のパッケージング技術とアプリケーション Oct 12, 2023 pm 01:43 PM

PHP のカプセル化テクノロジとアプリケーションのカプセル化は、オブジェクト指向プログラミングにおける重要な概念であり、外部プログラムに統一されたアクセス インターフェイスを提供するために、データとデータに対する操作を一緒にカプセル化することを指します。 PHP では、アクセス制御修飾子とクラス定義を通じてカプセル化を実現できます。この記事では、PHP のカプセル化テクノロジとそのアプリケーション シナリオを紹介し、いくつかの具体的なコード例を示します。 1. カプセル化されたアクセス制御修飾子 PHP では、カプセル化は主にアクセス制御修飾子によって実現されます。 PHP には 3 つのアクセス制御修飾子が用意されています。

Axios のカプセル化と Vue の一般的なメソッドの概要 Axios のカプセル化と Vue の一般的なメソッドの概要 Jun 09, 2023 pm 04:13 PM

Axios のカプセル化と Vue の一般的なメソッドの紹介 Axios は Promise をベースにした HTTP ライブラリであり、可読性、使いやすさ、拡張性が優れていることが利点です。人気のあるフロントエンド フレームワークとして、Vue は Axios の完全なサポートも提供します。この記事では、Vue で Axios をカプセル化する方法と、Axios でよく使用されるメソッドをいくつか紹介します。 1. Axios のカプセル化 開発プロセス中、多くの場合、次のような Axios のカスタマイズされたカプセル化を実行する必要があります。

C++ 関数はコードをカプセル化することで GUI 開発の効率をどのように向上させますか? C++ 関数はコードをカプセル化することで GUI 開発の効率をどのように向上させますか? Apr 25, 2024 pm 12:27 PM

コードをカプセル化することにより、C++ 関数は GUI 開発効率を向上させることができます。 コードのカプセル化: 関数はコードを独立した単位にグループ化し、コードの理解と保守を容易にします。再利用性: 関数はアプリケーション間で再利用できる共通の機能を作成し、重複やエラーを削減します。簡潔なコード: カプセル化されたコードにより、メイン ロジックが簡潔になり、読みやすく、デバッグしやすくなります。

Foxconn、AIワンストップサービスを構築、先進的な半導体パッケージング参入のためシャープに投資:2026年に生産開始、月産20,000枚のウエハーを生産する設計 Foxconn、AIワンストップサービスを構築、先進的な半導体パッケージング参入のためシャープに投資:2026年に生産開始、月産20,000枚のウエハーを生産する設計 Jul 18, 2024 pm 02:17 PM

このウェブサイトのニュースによると、経済日報は本日(7月11日)、フォックスコングループが、現在主流のパネルレベルファンアウトパッケージング(FOPLP)半導体ソリューションに焦点を当て、先進的なパッケージング分野に参入したと報じた。 1. 子会社のInnoluxに続き、Foxconn Groupが投資するシャープも日本のパネルレベルのファンアウトパッケージング分野への参入を発表し、2026年に生産開始される予定である。 Foxconn Group自体はAI分野で十分な影響力を持っており、先進的なパッケージングにおける欠点を補うことで、将来的により多くのAI製品の受注を促進する「ワンストップ」サービスを提供できるとしている。このウェブサイトの公開情報によると、フォックスコングループは現在シャープ株の10.5%を保有しており、現段階では保有を増減させる予定はなく、保有を維持すると述べている。

Go言語でカプセル化と継承を実装する方法 Go言語でカプセル化と継承を実装する方法 Jul 23, 2023 pm 08:17 PM

Go 言語でカプセル化と継承を実装する方法 カプセル化と継承は、オブジェクト指向プログラミングにおける 2 つの重要な概念であり、コードをよりモジュール化して保守しやすくし、コードの再利用にも便利です。この記事では、Go 言語でカプセル化と継承を実装する方法と、対応するコード例を紹介します。カプセル化 カプセル化とは、データと関数をカプセル化し、実装の詳細を隠し、外部使用に必要なインターフェイスのみを公開することです。 Go 言語では、カプセル化はエクスポートされた識別子とエクスポートされていない識別子によって実現されます。大文字の識別子は他のパッケージからアクセスできます

Python コードでのスケーラビリティの低下エラーを解決するにはどうすればよいですか? Python コードでのスケーラビリティの低下エラーを解決するにはどうすればよいですか? Jun 25, 2023 am 09:51 AM

Python は高級プログラミング言語として、データ分析、機械学習、Web 開発などの分野で広く使用されています。ただし、コードのサイズが拡大し続けるにつれて、Python プログラムのスケーラビリティの問題が徐々に明らかになります。スケーラビリティが低いというエラーは、Python プログラムが特定の状況下で要件の変化にうまく適応できず、大規模なデータを処理できないため、プログラムのパフォーマンスが低下することを意味します。依存関係が多すぎること、コード構造が貧弱であること、ドキュメントが不足していることなどはすべて、Python プログラムにおけるスケーラビリティの低下の原因となります。

See all articles