2017-03-20 14 views
4

byteValue()とshortValue()には、他の抽象メソッドとは違った実装があり、JDK1.1で追加されています。これがInterfaceの場合、これは可能ではありませんでした。しかし、開発者がNumberクラスを作成していたとき、なぜ彼らはそれを抽象クラスにしましたか?彼らは後でもっと多くの方法を加えるかもしれないと彼らが期待したからでしょうか? 私は、正式な引用でサポートされている回答しか必要としません。あなたが私の質問を見直して答えを出す時に、皆さんに感謝します。JavaのNumberクラスがAbstractクラスではなく、なぜインタフェースではないのですか?

+2

彼らはそれを代わりに抽象クラスのインターフェイスを作ることができますが、具体的なクラスは意味をなさなかっただろう。 Java 8以前では、インタフェースに実装を追加できませんでした。 –

+1

提案:あなたは権威の引用(電子メールリストの言語設計者からの議論、など)によってサポートされている唯一の答えをしたいことを指定するには、あなたの質問を編集した場合、その後、あなたがベースの意見として閉鎖する票の一部を回避することができます。 – yshavit

+0

@yshavitご意見ありがとうございます。 – Sandeepy

答えて

1

誰もがここにデザイナーの心の中に入ったのか分からないだろう、しかし、抽象クラスとインタフェースは、異なる目的のために使用されています。

(Javaで)クラスは、厳密な階層に継承し、この階層は、オブジェクトの関連のないクラスの別離を確実にするために使用することができるツールです。クラスは、階層全体のコア機能が類似している場合にはさらに論理的です。

たとえば、抽象クラスNumberおよびLetterでは、両方のクラスを持つことはできません。インタフェースを使用すると、両方を実装するクラスを作成して意味をなさないことがあります。

インターフェイスは、インターフェイスの指定された機能だけを使用する再利用可能なロジックで使用できるように、(通常は)クラスの小さな部分を公式に公開するためによく使用されます。それらは、Serializable,ComparableまたはRunnableのようなサポート機能を追加するためによく使用されます。それはそれは不可能PrintableこともComparableオブジェクトを持つようになるだろうと

たとえば、PrintableComparableは、ひどい抽象クラスになります。

ので、設計者は、具体的なクラスの1階層のみが数字、そして他には何もすることができることを確実にするためにNumber抽象クラスを作ることを選択したことがあります。おそらく、それはStringと同じように、JDKがこれらのクラスを特別なケースとして扱う将来の最適化を可能にするかもしれません。

+1

「誰もがここにデザイナーの心の中に入ったのか分からないだろう」 - それらのカップルが今してここに掲載します、プラス過去にこのような答えは、時には彼らが持っていたリストの会話を電子メールで送信するために引用して回答されています。数字と文字の両方として意味を持たないクラスについては、 'char'はそれと同様に動作します(' Character'はそうではありませんが)ので、意味をなさないと明確に主張するのは公正だとは思いません。 – yshavit

+0

おそらく私はそれを正しい言葉にすることはできませんが、クラスとインタフェースを設計するときには、特定の理由でどちらかを選ぶように見えます。私はここにその概要を書いてみました。見るべきもう一つの良い場所はここにあります:http://stackoverflow.com/questions/761194/interface-vs-abstract-class-general-oo – john16384

関連する問題