byteValue()とshortValue()には、他の抽象メソッドとは違った実装があり、JDK1.1で追加されています。これがInterfaceの場合、これは可能ではありませんでした。しかし、開発者がNumberクラスを作成していたとき、なぜ彼らはそれを抽象クラスにしましたか?彼らは後でもっと多くの方法を加えるかもしれないと彼らが期待したからでしょうか? 私は、正式な引用でサポートされている回答しか必要としません。あなたが私の質問を見直して答えを出す時に、皆さんに感謝します。JavaのNumberクラスがAbstractクラスではなく、なぜインタフェースではないのですか?
答えて
誰もがここにデザイナーの心の中に入ったのか分からないだろう、しかし、抽象クラスとインタフェースは、異なる目的のために使用されています。
(Javaで)クラスは、厳密な階層に継承し、この階層は、オブジェクトの関連のないクラスの別離を確実にするために使用することができるツールです。クラスは、階層全体のコア機能が類似している場合にはさらに論理的です。
たとえば、抽象クラスNumber
およびLetter
では、両方のクラスを持つことはできません。インタフェースを使用すると、両方を実装するクラスを作成して意味をなさないことがあります。
インターフェイスは、インターフェイスの指定された機能だけを使用する再利用可能なロジックで使用できるように、(通常は)クラスの小さな部分を公式に公開するためによく使用されます。それらは、Serializable
,Comparable
またはRunnable
のようなサポート機能を追加するためによく使用されます。それはそれは不可能Printable
こともComparable
オブジェクトを持つようになるだろうと
たとえば、Printable
とComparable
は、ひどい抽象クラスになります。
ので、設計者は、具体的なクラスの1階層のみが数字、そして他には何もすることができることを確実にするためにNumber
抽象クラスを作ることを選択したことがあります。おそらく、それはString
と同じように、JDKがこれらのクラスを特別なケースとして扱う将来の最適化を可能にするかもしれません。
「誰もがここにデザイナーの心の中に入ったのか分からないだろう」 - それらのカップルが今してここに掲載します、プラス過去にこのような答えは、時には彼らが持っていたリストの会話を電子メールで送信するために引用して回答されています。数字と文字の両方として意味を持たないクラスについては、 'char'はそれと同様に動作します(' Character'はそうではありませんが)ので、意味をなさないと明確に主張するのは公正だとは思いません。 – yshavit
おそらく私はそれを正しい言葉にすることはできませんが、クラスとインタフェースを設計するときには、特定の理由でどちらかを選ぶように見えます。私はここにその概要を書いてみました。見るべきもう一つの良い場所はここにあります:http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo – john16384
- 1. なぜexceptionはクラスであり、javaのインタフェースではないのですか?
- 2. java.sql.Statementが抽象クラスではなく、インタフェースであるのはなぜですか?
- 3. JavaでPropertiesクラスが必要なのはなぜですか?
- 4. DefinitelyTypedの `http.IncomingMessage`が、インタフェースではなくクラスとして定義されているのはなぜですか?
- 5. いくつかのJavaコードでは、DeckクラスがCardクラスを拡張するのはなぜですか?
- 6. PERSONがrefクラスではないのはなぜですか?
- 7. numberクラスのvalueOf/parseメソッドがJava 7の有効な数値を拒否するのはなぜですか?
- 8. Javaクラスが実装されたインタフェースからアノテーションを継承しないのはなぜですか?
- 9. C#でSeleniumの 'WebElement'クラスがないのはなぜですか?
- 10. System.Randomクラスが静的でないのはなぜですか?
- 11. なぜHttpContextはインターフェイスではなく抽象クラスですか?
- 12. 純粋な仮想メンバ関数abstractを宣言しないこのクラスはなぜですか?
- 13. 私のpythonクラスがうまくいかないのはなぜですか?
- 14. System.Net.Http.HttpMethodが列挙型ではなく、クラスであるのはなぜですか?
- 15. 私のクラスが内部で宣言されたインタフェースを実装できないのはなぜですか?
- 16. Java Numberデータ型がオーバーフローするのはなぜですか?
- 17. クラスCanvasPaneがJava APIに含まれていないのはなぜですか?
- 18. Android StudioでJavaクラスを作成できないのはなぜですか?
- 19. クラスのプロトタイプが機能しないのはなぜですか?
- 20. なぜJavaは内部クラスのインスタンスを作成できないのですか?
- 21. クラス内でオーバーライドできないのはなぜですか?
- 22. ユニットテストでクラスにアクセスできないのはなぜですか?
- 23. Pythonでクラスをインポートできないのはなぜですか?
- 24. URLClassLoaderでクラスをロードできないのはなぜですか?
- 25. JavaにImageクラスとIconクラスの両方があるのはなぜですか?
- 26. Javaクラスがデータベースに書き込まないのはなぜですか?
- 27. ButtonクラスにgetOnClickListenerがないのはなぜですか? (Android)
- 28. クラスが呼び出されないのはなぜですか?
- 29. Bootstrapクラスが適用されないのはなぜですか?
- 30. BCLにCRCクラスがないのはなぜですか?
彼らはそれを代わりに抽象クラスのインターフェイスを作ることができますが、具体的なクラスは意味をなさなかっただろう。 Java 8以前では、インタフェースに実装を追加できませんでした。 –
提案:あなたは権威の引用(電子メールリストの言語設計者からの議論、など)によってサポートされている唯一の答えをしたいことを指定するには、あなたの質問を編集した場合、その後、あなたがベースの意見として閉鎖する票の一部を回避することができます。 – yshavit
@yshavitご意見ありがとうございます。 – Sandeepy