Javaオブジェクト指向ノート(継続的な更新が完了する予定)

クラスとオブジェクト

オブジェクトはクラスのインスタンスです。
オブジェクトは特定のタイプのデータです。
属性:オブジェクトのさまざまな静的特性
クラス。
データ構造の観点から、クラスはそれ自体で新しいデータ型を作成します。
クラスは「カスタムタイプ」とも呼ばれます。
同じ名前をJavaプログラムで使用することはできません。

//类名必须和文件名相同
public class Merchandise {
    
    
    String name;
    String id;
    int count;
    double price;
} 

メンバー変数を使用する

publi static void main(String[] args){
    
    
Merchandise m1=new Merchandise();
m1.name="茉莉花茶";
m1.id="1115";
m1.count=100;
m1.price=99.9;
}

ドット演算子
ドット演算子は、前のエンティティの属性にアクセス/操作するために使用されます。「the」と同様に
、Merchandise.nameは商品の名前として読み取ることができます。

参照データ型
javaのデータ型は、基本データ型と参照データ型に分けられます。

m1是一个Merchandise类型的引用,只能指向Merchandise类型的实例;
引用数据类型变量包含两部分信息:类型和实例。
每一个引用数据类型的变量(简称引用),都是指向某个类(class/自定义类型)
的一个实例/对象(instance/object)。不同类型的引用在java的世界但是引用。
引用的类型信息在创建时就已经确定,可以通过给引用赋值,让其指向不同的实例。

Merchandise m1;
m1=new Merchandise();

-オブジェクトMerchandisem1を宣言
します-オブジェクトm1 = new Merchandise();
をインスタンス化します。new演算子を使用して、特定のクラスのインスタンスを作成します。Javaプログラムの実行中、これらの作成されたすべてのインスタンスは、広告ボードに似たヒープと呼ばれる場所にJavaによって格納されます。
インスタンスを作成するということは、クラスの定義とポイントに必要な「紙」に基づいて本を作り、掲示板に掛けることです。インスタンス自体は小さな本と見なすことができます。
参照に保存されているのは、特定の本が置かれている掲示板のアドレスに相当します。
クラスとオブジェクトの関係
クラスはオブジェクトのテンプレートであり、オブジェクトは
クラスのインスタンスです。Javaプログラムには、同じクラス名を持つクラスが1つだけ存在できます。つまり、型は存在しません。 。同じ名前を持つ
Aクラスは、多くのオブジェクトを持つことができ、
オブジェクトのみを作成するために、1クラスに基づくことができます

参照とクラスとオブジェクト間の関係は。
参考文献は、一つのクラスへの参照でなければならない、とだけすることができます。参考文献は、
彼らだけが属するクラスのオブジェクトを指し示すことができます
。同じタイプの参照は値を割り当てることができます。
への参照のみメンバー変数へのアクセスなど、1つのオブジェクトを使用して1つのオブジェクトを操作できます

JAVAのパッケージとアクセス修飾子
クラスの混同を避けるために、クラスクラスをフォルダに配置できます。このとき、packageステートメントを使用して、クラスがどのパッケージに含まれているかをJavaに通知する必要があります。パッケージステートメントは、ソースファイルのディレクトリに正確に対応している必要があり、大文字と小文字は同じである必要があります。
パッケージはパッケージとして読み取られます。一般的に、クラスはパッケージに含まれ、ルートディレクトリに直接含まれることはありません。
異なるパッケージに同じ名前のクラスを含めることができます。
クラスは1つのパッケージステートメントのみを持つことができます。パッケージステートメントがある場合、それはクラスの有効なコードの最初の行である必要があります。

import import package
別のパッケージでクラスを使用する場合は、パッケージ名を持参する必要があります。
使用するたびにパッケージ名を付けるのは非常に面倒です。使用するクラスでimportステートメントを使用して問題を一度解決すると、クラスを直接使用できます。これはScannerクラスのようなものです。
複数のインポートステートメントが存在する可能性があります。
パッケージに多くのクラスをインポートする必要がある場合は、*ワイルドカードを使用できます。
クラスをロードする順序は、importステートメントの位置とは関係ありません。

   import包名.*; 只能访问指定包名下的类,无法访问子包下的类。

public
によって変更されたpublic属性には、任意のパッケージのクラスからアクセスできます。
アクセス修飾子のない属性はデフォルトのアクセス修飾子と呼ばれ、このパッケージの他のクラスと独自のオブジェクトで使用できます。
アクセス修飾子は、属性アクセスを制限または許可する修飾子です。


クラスの完全修飾名パッケージ名+クラス名=クラスの完全修飾名。それはまた、全国民の階級と呼ぶこともできます。
完全修飾名を同じJavaプログラムで繰り返すことはできません。

関数のオーバーロード
パラメーターリストが異なる限り、クラスは複数のコンストラクターを持つことができます。
オブジェクトを作成するときに異なるパラメーター値が与えられると、異なるコンストラクターが自動的に呼び出されます。
this()を介して他のコンストラクターを呼び出すこともできます。
クラス内の名前は同じでパラメータリストが異なる関数は、過負荷関係を構成します。

単一責任の原則
機能変更の原因は1つだけです。

これ
は、
現在のクラスのメンバーメソッドにアクセスします。現在のクラスのメンバープロパティに
アクセスします。現在のクラスの構築メソッドにアクセスし
ます。静的メソッドでは使用できません。

カプセル化

クラス内のクラスの一部の情報を非表示にし、外部プログラムが直接アクセスできないようにします。
このクラスが提供するメソッドを使用して、操作と非表示情報へのアクセスを実現します。
非表示オブジェクトの情報
予約されています。アクセスインターフェイスは予約されています。

機能:
1
指定されたメソッドを介してのみデータにアクセスできます。2。クラスのインスタンスの詳細を非表示にします。これは、変更と実装に便利です。

手順
1.属性の可視性を変更します-プライベート制限には現在のクラス内でのみアクセスでき
ます2.get / setメソッド
作成しますget / setメソッドに属性制限を追加します

静的キーワード

静的静的メンバー
は同じストレージスペースを
共有します1.クラスオブジェクトの共有。
2.クラスがロードされたときに生成され、クラスが破棄されたときに解放され、ライフサイクルが長くなります。
静的メンバーアクセスメソッド:
1。オブジェクト。メンバー
2.クラス。メンバー

static + methods。クラスメソッド、静的メソッド、および
静的メソッドは、同じクラスの非静的メンバーに直接アクセスすることはできませんが、同じクラスの静的メンバーを直接呼び出すことしかできません。
非静的メンバーには、オブジェクトがインスタンス化された後、object.methodを介してのみアクセスできます。

このメソッドでは、オブジェクトがパラメーターとして使用され、その参照が渡され、オブジェクトのすべての情報を参照によって取得できます。

継承

クラス間の関係。
新しいクラスを作成するための基礎として、既存のクラスの定義を使用します。
新しいクラスの定義は、新しいデータまたは新しい関数を追加でき、親クラスの関数を使用することもできますが、親クラスを選択的に継承することはできません。

拡張します

class Dog extends Animal{
    
    
}
class Cat extends Animal{
    
    
}

親クラスの構築を継承または書き換えることはできません
が、サブクラスオブジェクトのインスタンス化プロセスのメソッドの書き換えに影響します
構文規則:
戻り値のタイプ
継続関係のあるサブクラス
メソッド名とパラメータリスト同じです。 (パラメータType、order、number、)、メソッドの戻り値はサブクラスタイプにすることができます。
アクセス修飾子、アクセス範囲は親クラスのアクセス範囲以上である必要があります。
何もありませんメソッドのパラメータ名と関係がある

アクセス修飾子
private:このクラスでのアクセスのみを許可する
public:任意の場所でのアクセスを許可する
保護:現在のクラスで許可する、同じパッケージサブクラス/非サブクラス、クロスパッケージサブクラス呼び出し、クロスパッケージ非サブクラスは許可されない、
デフォルト:同じパッケージサブクラス/非サブクラスの現在のクラスでの呼び出しは許可されています。クロスパッケージサブクラス/非サブクラスの呼び出しは許可されていません。


親クラス参照に代わってスーパースーパー
親クラスメンバーメソッド
へのアクセスsuper.print ();親クラス属性
へのアクセスsuper.name;親クラスコンストラクターメソッドへのアクセスsuper();
サブクラスコンストラクターはデフォルトで親を呼び出します
super()によるクラスの引数なしの構築メソッド親クラス
super()からのアクセスが許可されている他のコンストラクターの呼び出しは、サブクラスコンストラクターの有効なコードの最初の行に配置する必要があります。

初期化シーケンスの後、
親クラス静的メンバー
サブ静的メンバー
親オブジェクトコンストラクター
サブクラスオブジェクトコンストラクターを継承ます

オブジェクトクラス
オブジェクトクラスは、すべてのクラスの親クラスです。
クラスが継承関係を明確に識別するためにextendsキーワードを使用しない場合、デフォルトでオブジェクトクラス(配列を含む)を継承します
。javaの各クラスは、定義されたメソッドを使用できます。オブジェクト内。

最終
最終クラス:継承は許可されていません。
最終メソッド:このメソッドはサブクラスでオーバーライドできませんが、継承してサブクラスで通常どおり使用できます。
最終的なメソッドクラスのローカル変数:主に、特に使用される前に値を割り当てます。一度割り当てられると、変更することはできません。
クラスのメンバー変数:割り当てプロセス:1。直接初期化を定義します2.メソッドを構築します3.コードブロックを構築します

変更され
た変数は、基本データ型の変数を変更できないことを意味します-最初の割り当て後に変更することはできません
。参照型の変数-初期化後に別のオブジェクトを指すことはできませんが、オブジェクトの内容は次のとおりです。変数

静的使用
最終変更で使用できますが、パフォーマンスは向上しますが、スケーラビリティが低下します。


パッケージ、クラス、属性、メソッド、ローカル変数、メソッドパラメータなどの前でアノテーションを宣言して、説明、アノテーション、および

デザインパターン

ソフトウェア開発プロセスでソフトウェア開発者が直面する一般的な問題の解決策。

シングルトンモード
目的:クラスのオブジェクトをシステム内の唯一のインスタンスにします。
定義:クラスにはインスタンスが1つだけあり、自己インスタンス化によってシステム全体が提供されます。
ポイント
1.クラスはインスタンスを1つだけ持つことができます
2.あなた自分でインスタンスを作成する必要があります
3.このインスタンスをシステム全体に自分で提供する必要があります
実装
1.プライベート構築メソッドのみを提供します
2.このクラスの静的プライベートオブジェクトを含みます
3.静的プライベートオブジェクトを作成および取得するための静的パブリックメソッドを提供します

利点
1.メモリ内にオブジェクトが1つしかないため、メモリスペースが節約されます
2.オブジェクトの頻繁な作成と破棄を
回避し、パフォーマンスを向上させます3.共有リソースの複数の占有を回避します
欠点
1.拡張がより困難に
なります2.インスタンス化されたオブジェクトが役に立たない場合長い間、システムはリサイクルのためにデフォルトでガベージになり、オブジェクトの状態が失われます。
シナリオ
1.オブジェクトの作成時に占有されているリソースが多すぎますが、同時にこのタイプのオブジェクトを使用する必要があります
。2。均一構成情報の読み取りと書き込みなど、システム内のリソースの読み取りと書き込みの要件
3.複数のインスタンスが存在する場合、数値ジェネレーターなどのプログラムロジックエラーが発生する可能性があります。

ポリモーフィズム

異なるタイプのオブジェクトは、同じメッセージに対して異なる応答をすることができます。
コンパイル時のポリモーフィズム
設計時のポリモーフィズム
メソッドのオーバーロード
実行時のポリモーフィズム
プログラムは、プログラムの実行時に呼び出すメソッドを動的に決定します。
必要な条件
は継承関係を満たし
ます。親クラスの参照は子クラスオブジェクトを指します。


サブクラスインスタンスへの変換親クラス参照をアップすると、親クラスのサブクラスメソッドを呼び出して、派生した親クラスをオーバーライドできます。サブクラスを呼び出すことはできません。
カテゴリに変換された一意のメソッドサブカテゴリ
注:親クラスの静的メソッドはキルトできません。クラスの書き換え。したがって、アップキャスト後は、親クラスの元の静的メソッドのみを呼び出すことができます。

Animal one=new Animal();
        Animal two=new Cat();
        Animal three=new Dog();

ダウンキャスト
サブクラス参照は親クラスオブジェクトを指します。ここでは強制的に
変換する必要があります。サブクラスの一意のメソッドを呼び出すことができ
ます。instanceof演算子を強制的に変換するには、変換条件を満たす必要があります。returntrue/ false

     
        if(two instanceof Cat){
        Cat temp=(Cat)two;

抽象クラスabstractは
インスタンス化できません。また、アップキャストを通じてサブクラスインスタンスを指すことができます。

アプリケーションシナリオ:
親クラスは、そのサブクラスに含める必要のあるメソッドのみを認識しますが、これらのサブクラスがこれらのメソッドをどのように実装するかを正確に知ることは不可能です。
抽象メソッド:メソッド本体は許可されていません。サブクラスは親クラスの抽象メソッドをオーバーライドする必要があります。それ以外の場合、サブクラスも抽象クラスです。
静的最終プライベートは抽象と共存できません。
ルール
1.抽象は抽象クラスを定義します
2.抽象クラス直接インスタンス化することはできません。継承することしかできません。オブジェクトインスタンスは、上方変換によって完了することができ
ます。3。抽象は特定の実装なしで抽象メソッドを定義し
ます。4。抽象メソッドを含むクラスは抽象クラスです
。5。抽象クラスは抽象メソッドを持つことができません。

インターフェース
インターフェースは、クラスの特定のバッチが準拠する必要のある仕様を定義します。
インターフェースは、これらのクラスの内部データやこれらのクラスのメソッドの実装の詳細を考慮しません。特定のメソッドをで提供する必要があることのみを規定します。これらのクラス。

インターフェイスのabstractメソッドはabstractキーワードを記述する必要はありません。
アクセス修飾子のデフォルトはpublicです。
クラスがインターフェイスを実装する場合、インターフェイスのすべての抽象メソッドを実装する必要があります。それ以外の場合は、クラスをとして設定する必要があります。抽象クラス。

インターフェイスは継承を実装することもでき、複数の親インターフェイスを継承できます

内部クラス
メンバー内部クラス
1.内部クラスを外部で使用する場合、直接インスタンス化することはできず、外部クラスの情報によってインスタンス化を完了することができます
。2 内部クラスのアクセス修飾子は任意ですが、アクセススコープが影響を受け
ます
。3。内部クラスは外部クラスのメンバーに直接アクセスできます。同じ名前の属性が表示される場合は、内部クラスが優先されます。4。外部class.thisを使用できます。外部クラスの同じ名前の情報にアクセスするためのメンバー
。5。外部クラスaccess =内部クラス情報、内部クラスインスタンスを渡す必要があり、直接アクセスできません
。6。内部クラスがコンパイルされた後。クラスファイルの命名:外部クラス$内部class.class

静的内部クラス
1.静的内部クラスでは、外部クラスの静的メンバーにのみ直接アクセスできます。非静的メンバーを呼び出す必要がある場合は、オブジェクトインスタンス
2を使用できます。静的内部クラスオブジェクトインスタンスの場合、外部クラスオブジェクトに依存することはできません。3
。はい外部クラス、内部クラス、および静的メンバーを介して内部クラスの静的メンバーにアクセスします
。4。内部クラス属性が外部クラス属性と同じ名前の場合、デフォルトでは、内部クラスのメンバーは直接呼び出されます。
外部クラスの静的属性にアクセスする必要がある場合は、外部クラスを使用できます。属性。外部クラスの
非静的プロパティにアクセスする必要がある場合は、newを使用できます。外部クラス()。属性。

メソッド内部クラス/ローカル内部クラス
1.メソッドで定義され、スコープもメソッド内にあります
。2 。メソッドの内部メンバーの使用規則と同じように、public、private、protected、staticを前に追加することはできません。クラス
3。静的メンバーをクラス
4に含めることはできません。クラスには、最終および抽象の変更されたメンバーを含めることができます。

匿名内部クラス
1.匿名内部クラスには型名、インスタンスオブジェクト名がありません
2.コンパイルされたファイル名:外部クラス$ math.class
3.プライベート、パブリック、保護、抽象、静的変更を使用
できません4.構築メソッドを記述できません、あなたコードブロックに構造を追加できます
5.静的メンバーは表示できません
6.匿名の内部クラスはインターフェイスを実装したり親クラスを継承したりできますが、両方を持つことはできません

おすすめ

転載: blog.csdn.net/weixin_42403632/article/details/105849644