-2

Mathクラスの Java API に従って、Math は Object クラスを拡張します。

public final class Math extends Object

ただし、Math は Object のメソッドを継承せず、Math オブジェクトを構築することもできません (編集: このステートメントは誤りであり、部分的に誤りです。以下を参照してください)。

私の質問は、なぜこれが行われるのですか?オブジェクトの場合は、Object の必要最小限のメソッドが必要です。それがオブジェクトでない場合、オブジェクトを拡張するべきではないように感じます。

そして、オブジェクトを拡張する正当な理由があると仮定すると、それはどのように行われるのでしょうか? つまり、継承されたメソッドとコンストラクターはどのように抑制されるのでしょうか。

数学は、この種の静的定義クラスの私の頭の中で最も重要な例です (あなたはそう呼ぶのでしょうか?) が、この質問は同様の目的を持つクラスにも当てはまるかもしれません。

編集:したがって、すべてのクラスが暗黙的にオブジェクトを拡張することを認識しています。私を悩ませているのは、理論上の「オブジェクト」の概念 (状態と関連する機能を持つもの) と、ここで行われていることとの間に論理的な断絶があることです。

4

4 に答える 4

4

オブジェクトはすべてのスーパー クラスです。すべてのクラスは Object を拡張します

于 2012-10-07T02:49:24.860 に答える
3

すべてのクラスは、別のクラスを拡張しない限り、暗黙的に拡張Objectされます (Java は多重継承を許可しません)。

まだ!別のクラスを拡張することで、最終的には を拡張します。これは、Object別の特定のクラスを拡張しない最後のクラスが を拡張するためObjectです。

この「デフォルトの継承」の背後にある概念は、Objectの JavaDocから直接抽出できます。

クラス オブジェクトは、クラス階層のルートです。すべてのクラスには、スーパークラスとして Object があります。配列を含むすべてのオブジェクトは、このクラスのメソッドを実装します。

編集: Math はObjectのメソッドを継承します。それらをタフにオーバーライドすることはなく、呼び出しはスーパークラスの実装に派生します。

Mathクラスの重要な側面に注意を払う必要があります。それが定義する定数とメソッドは主に静的です。これらの計算はコンテキストから独立しているため、数学関数はクラスの特定のインスタンスに依存しません。

Math クラスのインスタンスを作成する特別な理由はないので、そのコンストラクターは表示されません。できないので、やMath m = new Math()などのメソッドが表示されません。特に、クラスは final であり、拡張できないため、それらを定義するサブクラスを作成することはできません。私見それは無意味です。equalshashcode

于 2012-10-07T02:54:30.860 に答える
3

Math Objectのメソッドを継承します。Java のすべてのクラスは、最終的に から継承する必要がありObjectます。しかし、Mathオブジェクトを構築することはできないため、問題ではありません。メソッドは継承されますが、インスタンスを構築できなければ、からそれらを使用することはできませんMath

于 2012-10-07T02:49:56.623 に答える
2

Objectすべての Java クラスのスーパー クラスです。Mathオブジェクトのメソッドを継承するのは間違っています。

もっと知りたい方はソースをご覧ください。

http://www.docjar.com/html/api/java/lang/Math.java.html

于 2012-10-07T02:51:41.497 に答える