2

私は「Effective Java」を読んでいましたが、次の議論にはあまり従いませんでした。誰かがこれをクリアするのを手伝ってくれたら

抽象クラスは、既存のクラスに後付けできないのと同じ理由で、ミックスインの定義に使用できません。

特に「『抽象クラスは既存のクラスに後付けできない』ということを理解していませんでした」

例を作ってください。

http://books.google.se/books?id=ka2VUBqHiWkC&lpg=PA93&dq=Abstract%20classes%20cannot%20be%20used%20to%20define%20mixins%20for%20the%20same%20reason%20that%20they%20can 't% 20be%20retrofitted%20onto%20existing%20classes&pg=PA93#v=onepage&q=Abstract%20classes%20cannot%20be%20used%20to%20define%20mixins%20for%20the%20same%20reason%20that%20they%20can't%20be% 20retrofitted%20to%20existing%20classes&f=false

ありがとう

4

1 に答える 1

2

Java にインターフェースが存在せず、Java がまだ単一継承であると想像してみてください。

ここで、ストリームの一種であるクラスを作成したい場合を想像してください。そのクラスを既存の Stream クラスから継承して、そのコードをすべて書き直す必要がないようにします。ああ、しかし、クラスをシリアライズ可能にしたいので、Serializ から継承します。ちょっと待ってください...すでに Stream から継承しています。そのクラスから継承することもできません。そのため、多くのコードを書き直すか、あきらめなければならないという困難な状況に陥っています。

これが「抽象クラスを既存のクラスに後付けできない」という意味です。クラスが特定の型階層にある場合、型階層を書き換えずに新しい抽象クラスの動作を実装/継承させることは不可能です。

(本が完全に明確に説明しているというコメントにも同意します)

于 2013-02-06T22:16:47.213 に答える