[JAVA]オブジェクト向け(6)
金ソンパク先生の講義をまとめた文だ.詳細はhttps://www.facebook.com/groups/codingeverybody/posts/7530033737037097/を参照してください.
次の結果が得られます.
上図はprintlnメソッドについての説明です.Stringオブジェクトタイプのx.valueOfを使用して変数Stringを読み込みます.
コード解析:obj=nullの場合はnull、obj!=nullの場合objです.toString()を返します.
すなわち,我々が望むc 1オブジェクトを文字として出力するためには,オブジェクトオブジェクトのtoStringメソッドを上書きしなければならない.
toString() eqauls() & hashCode() インスタンスを作成します. 値を使用してインスタンスを作成する場合は、ジェネレータを使用します. クラスの作成時にジェネレータが作成されていない場合は、デフォルトのジェネレータが自動的に生成されます. 基本ジェネレータとは、パラメータを受け入れないジェネレータを指す. ジェネレータはメソッドと似ている必要がありますが、戻りタイプはなく、クラス名と同じです.
パラメータがゼロの作成者を基本作成者と呼びます.
生成者が1人もいない場合、何もしない基本生成者が自動的に生成されます.
上のコードでは
c1.printName(); c 1オブジェクトには値が受信されていないため、デフォルト値nullはnameに格納されます.
c2.printName(); c 2オブジェクトからurstoryの値が受信されたため、urstoryは保存されます.
これは、UserクラスにUserジェネレータが作成され、ジェネレータが作成されると基本ジェネレータは生成されないためです.
UserExamクラスは、Userオブジェクトにnameとemailを追加する必要があります.
ユーザー名とEメールをロードします.
前述したように、userオブジェクトからnameを取得しようとしたときにエラーが発生しました.これは、Userクラスがemail、password、nameをprivateに設定しているためです.
上記のようにgetメソッドを作成し、
メソッドを使用して、nameおよびemailをロードできます.
上の方法のようにnameとemailをロードできますが、変更できないものを不変オブジェクトと呼びます.
以下に示すように、TOStringメソッドをUserクラスに上書きします.
次に、UserExamからジェネレータuserを呼び出します.
toString法によりemailとnameの値を得ることができる.
Userクラス
上のコードから重複する箇所が多く見られます.
重複する部分を減らす.
このジェネレータを利用すると,コードの重複を解決できる.
ただし、thisジェネレータはコードの最前列にある必要があります.
ジェネレータには複数のパラメータがあり、タイプが異なる場合は複数のパラメータがあります. インスタンス自体を参照するときに使用されるキーワードです. this()作成者とは、自分の作成者を指します. this()ジェネレータはジェネレータでのみ使用できます. this()ジェネレータは、ジェネレータでsuper()ジェネレータを呼び出すコードの後または最初の行にある必要があります.
上図では、c 1ジェネレータとb 1ジェネレータを作成してCar 2 Examを実行すると、「Car 2()ジェネレータの呼び出し」は2回の呼び出しになります.
親作成者を追加するコードが自動的に生成されるからです.
superは、インスタンスの親を参照する際に使用されるキーワードです. super()ジェネレータは親ジェネレータを表します. super()ジェネレータは、ジェネレータでのみ使用できます. super()ジェネレータは、ジェネレータ内の最初の行にのみ表示されます. ジェネレータはsuper()ジェネレータを呼び出す必要があります.ユーザーがsuper()ジェネレータを呼び出すコードを記述していない場合、親のデフォルトジェネレータが自動的に呼び出されます. の親にデフォルトジェネレータがない場合、ユーザーはスーパー()ジェネレータを直接呼び出すコードを記述する必要があります. Stringクラスは不変のオブジェクトです.
Stringが所有するすべてのメソッドは、String内部の値を変更しません.
次の結果が得られます.
どうしてこんな結果になったのでしょうか。理解してみましょう。
1.printlnメソッドについて説明します。
上図はprintlnメソッドについての説明です.Stringオブジェクトタイプのx.valueOfを使用して変数Stringを読み込みます.
2.valueOfについて
コード解析:obj=nullの場合はnull、obj!=nullの場合objです.toString()を返します.
System.out.println(o1.toString()); == System.out.println(o1);
上の2つのコードは同義です.しかし、上の結果は役に立たない。
すなわち,我々が望むc 1オブジェクトを文字として出力するためには,オブジェクトオブジェクトのtoStringメソッドを上書きしなければならない.
オブジェクトが提供するオーバーライド方法
生成者
パラメータがゼロの作成者を基本作成者と呼びます.
生成者が1人もいない場合、何もしない基本生成者が自動的に生成されます.
上のコードでは
c1.printName(); c 1オブジェクトには値が受信されていないため、デフォルト値nullはnameに格納されます.
c2.printName(); c 2オブジェクトからurstoryの値が受信されたため、urstoryは保存されます.
別の例
エラーの原因は何ですか?
これは、UserクラスにUserジェネレータが作成され、ジェネレータが作成されると基本ジェネレータは生成されないためです.
UserExamクラスは、Userオブジェクトにnameとemailを追加する必要があります.
ユーザー名とEメールをロードします.
前述したように、userオブジェクトからnameを取得しようとしたときにエラーが発生しました.これは、Userクラスがemail、password、nameをprivateに設定しているためです.
上記のようにgetメソッドを作成し、
メソッドを使用して、nameおよびemailをロードできます.
上の方法のようにnameとemailをロードできますが、変更できないものを不変オブジェクトと呼びます.
オブジェクトのtoString()の使用方法
以下に示すように、TOStringメソッドをUserクラスに上書きします.
次に、UserExamからジェネレータuserを呼び出します.
toString法によりemailとnameの値を得ることができる.
ここでは,個人情報に敏感なコンテンツ(password)をtoStringメソッドに置かないことが重要である.
Userクラス
上のコードから重複する箇所が多く見られます.
重複する部分を減らす.
このジェネレータを利用すると,コードの重複を解決できる.
ただし、thisジェネレータはコードの最前列にある必要があります.
ジェネレータ過負荷
自分のジェネレータを呼び出すときにthis()を使用します。
super()例
上図では、c 1ジェネレータとb 1ジェネレータを作成してCar 2 Examを実行すると、「Car 2()ジェネレータの呼び出し」は2回の呼び出しになります.
Bus 2クラスにジェネレータは作成されていませんが、デフォルトではsuper()です。自動的に生成されるからです。
親作成者を追加するコードが自動的に生成されるからです.
親のジェネレータを呼び出すときにsuper()を使用します。
不変オブジェクト
Stringが所有するすべてのメソッドは、String内部の値を変更しません.
Reference
この問題について([JAVA]オブジェクト向け(6)), 我々は、より多くの情報をここで見つけました https://velog.io/@hoha/JAVA-객체지향6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol