私はJavaが初めてで、基本を学んでいます。toString
私はメソッドと、自分のクラスでそれをオーバーライドする方法を研究していました。なぜそうしなけれtoString
ばならないのだろうpublic
か?Object
クラスでそう定義されているからですか?
7 に答える
考えてみてください: MyGizmo で Gizmo をサブクラス化します。これは、Gizmo を使用できる場所であればどこでも、その場所で MyGizmo を使用できることを意味します。一部のプログラムがgizmoObject.toString()
動作する場合、gizmoObject が Gizmo ではなく MyGizmo であっても機能するはずです。
特に、toString
オブジェクトの印刷とダンプに使用され、すべてのオブジェクトでアクセスできる必要があります。
メソッドをオーバーライドする場合、オーバーライドの可視性は、少なくとも基本メソッドと同じくらい可視的でなければなりません。
メソッドをオーバーライドする場合、オーバーライドの可視性は基本メソッドの可視性以上である必要があります
メソッドをオーバーライドするときは、オーバーライドされたメソッドの可視性を、基本クラスまたはそれより広い範囲のものとして宣言する必要があります。
これは、私への参照として私が自分で書いたオーバーライドルールに関するメモです。
/* アクセス修飾子 */
1- 子のアクセス修飾子は同じかそれ以上でなければなりません (順序: public - protected - default (package-private) - private)。親のアクセス修飾子は非公開にしないでください。子が親のメソッドにアクセスできない場合、 @Override アノテーションなしでメソッドをオーバーライドすると、新しいメソッドと見なされます。
/* 戻り型 */
2- 子の戻り型は、同じクラスまたはサブクラスである必要があります。
/* 例外 */
3- 親のメソッドがチェック例外をスローする場合、子のメソッドは次のことができます。 a- 同じ例外またはサブクラスをスローします。b- 例外をスローしない。c- 実行時例外をスローします。
4- 親のメソッドが未チェックの例外をスローする場合、子のメソッドは次のことができます。 a- 例外をスローしない。b- 実行時例外をスローします。
5- parnet のメソッドが例外をスローしない場合、子のメソッドは次のことができます。 a- 例外をスローしない。b- 実行時例外をスローします。
サブクラス メソッドの可視性をオーバーライドするときは、親クラスよりも広くする必要があります。
広い順から厳密な順:
パブリック デフォルト プロテクト プライベート
メソッドをオーバーライドしているため、それをプロトタイプ メソッドまたはそれ以上として定義する必要があります。