2017-05-02 2 views
0

継承を介してコードの再利用が可能であると聞きました。例:スーパークラスAから、拡張された場合はプライベートメソッド以外のメソッドをクラスBに継承できます。クラスは同じパッケージに入っています。これが継承のコード再利用性を実現する方法であれば、そのクラスAのオブジェクトを作成することによっても同じことができます。私は、プライベートメソッド以外のパブリックメソッドにアクセスできるオブジェクトを作成することを意味します。なぜここに継承が必要なのか?継承のコード再利用性は何ですか?Javaでの継承におけるコード再利用性の実現

+0

クラスAにメソッドを追加する場合はどうなりますか?あるいは、特定の方法が(他の方法を維持しながら)何を変更するのですか? – UnholySheep

+0

[公式チュートリアル](https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)の説明はどのようにして不明ですか? – UnholySheep

+0

コードの再利用性は、インタフェースとコンポジションを使用する方がよいでしょう。 – MaxZoom

答えて

2

誰かがあなたに「悪い」アドバイスをくれたことを誰にも教えてくれます。

継承の目的は、コードの再利用のためにではないです。

クラスは、モデル(別名抽象)のリアリティを構築するように設計されています。より具体的には:有用なモデル。そして、その中核部分の1つは、class A extends Bと書いてありません。便利なだからです。 同じ挙動を示す二つのオブジェクト:

あなたはので、あなたの問題領域で、それを行う、それは単にどのは、相続のコアがある B.-であることを意味します。

そして逆に、より適切で受け入れられたパラダイムは、正反対の方向、つまりFCoI(継承を超える構成)になります。

誤解しないでください:コードの重複は、あなたがプログラマーとして行うことができます最悪ものの一つです。だから、コードの重複を避けることは、良いプログラミングのコアの美徳の1つです。しかし、継承はクラス間の結合を生み出します。クラスの分離をあきらめてコードの重複を防ぐのは良い考えではありません。継承があると、別のコンテキストでクラスを再利用できなくなります。

意味:コードの重複を防ぐために継承がうまく機能することがあります。しかし、あなたはそれに注意する必要があります。

+0

私はこの回答を支持する例があります:私は仕事場のカメラで作業しています。私たちにはさまざまなモデルに接続するデバイスがあるので、抽象的な「カメラクラス」があり、すべてのモデルはこのクラスを継承して、そのカメラの特定の機能をサポートします。それは実際の世界の例であり、理解することは難しくありません。 –

+0

「コードの重複はプログラマとして最悪のものの1つです」と同意しないでください。それは単純ではありませんが、あなたもこれを知っていると確信しています。 [有害とみなされるクローニングは有害であると考えられている:ソフトウェアでのクローニングのパターン](http://dl.acm.org/citation.cfm?id=1466716) – NickL

+1

オペレーションは、 "継承を使用してコードを再利用する" 。私の目にはかなり狭い。それを超えて:コードの重複の問題は保守であり、バグを導入する可能性が高くなります。ほとんど同じクローンが始まるとすぐに...それはバグが入った時です。また、あまりにも多くの人がそれを気にしません。私が意味すること:現実の世界では、問題は前方に進み、コピー/ペーストする人によって作成されます。だから私は "それをしないでください"の面で誤りを好む – GhostCat

関連する問題