[JAVA]オブジェクト向け(6)


金ソンパク先生の講義をまとめた文だ.詳細はhttps://www.facebook.com/groups/codingeverybody/posts/7530033737037097/を参照してください.


次の結果が得られます.

どうしてこんな結果になったのでしょうか。理解してみましょう。


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メソッドを上書きしなければならない.

オブジェクトが提供するオーバーライド方法

  • 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()の使用方法


    以下に示すように、TOStringメソッドをUserクラスに上書きします.


    次に、UserExamからジェネレータuserを呼び出します.
    toString法によりemailとnameの値を得ることができる.

    ここでは,個人情報に敏感なコンテンツ(password)をtoStringメソッドに置かないことが重要である.


    Userクラス

    上のコードから重複する箇所が多く見られます.
    重複する部分を減らす.

    このジェネレータを利用すると,コードの重複を解決できる.
    ただし、thisジェネレータはコードの最前列にある必要があります.

    ジェネレータ過負荷

  • ジェネレータには複数のパラメータがあり、タイプが異なる場合は複数のパラメータがあります.
  • 自分のジェネレータを呼び出すときにthis()を使用します。

  • インスタンス自体を参照するときに使用されるキーワードです.
  • this()作成者とは、自分の作成者を指します.
  • this()ジェネレータはジェネレータでのみ使用できます.
  • this()ジェネレータは、ジェネレータでsuper()ジェネレータを呼び出すコードの後または最初の行にある必要があります.
  • super()例






    上図では、c 1ジェネレータとb 1ジェネレータを作成してCar 2 Examを実行すると、「Car 2()ジェネレータの呼び出し」は2回の呼び出しになります.

    Bus 2クラスにジェネレータは作成されていませんが、デフォルトではsuper()です。自動的に生成されるからです。


    親作成者を追加するコードが自動的に生成されるからです.

    親のジェネレータを呼び出すときにsuper()を使用します。

  • superは、インスタンスの親を参照する際に使用されるキーワードです.
  • super()ジェネレータは親ジェネレータを表します.
  • super()ジェネレータは、ジェネレータでのみ使用できます.
  • super()ジェネレータは、ジェネレータ内の最初の行にのみ表示されます.
  • ジェネレータはsuper()ジェネレータを呼び出す必要があります.ユーザーがsuper()ジェネレータを呼び出すコードを記述していない場合、親のデフォルトジェネレータが自動的に呼び出されます.
  • の親にデフォルトジェネレータがない場合、ユーザーはスーパー()ジェネレータを直接呼び出すコードを記述する必要があります.
  • 不変オブジェクト

  • Stringクラスは不変のオブジェクトです.
    Stringが所有するすべてのメソッドは、String内部の値を変更しません.