C++から見れば多重継承を許さない代わりにI/Fができたように思えるかもしれないけど、 私の感覚ではクラスとI/Fは意味的に違うのでメソッドをもったからクラスでいいじゃないかという感覚はないなぁ。 クラスは関連性があるがI/Fは関連性はない(操作方法が同じだというだけ)。 たとえばUNIXはすべてをファイルのように扱えるようにしている(インターフェース)が、デバイスやプロセスは結局のところファイルではない。なのでデバイスやプロセスの親クラスとしてファイルを据えたくない。「is-a」の関係性でいえば「プロセス is not a ファイル」だから。
インタフェースへのデフォルト実装はキモい (スコア:1)
実装を定義できたら抽象クラスと同じじゃない
だったら最初からinterfaceなんか作らずにclassの多重継承を認めればよかった
Re: (スコア:0)
私の感覚ではクラスとI/Fは意味的に違うのでメソッドをもったからクラスでいいじゃないかという感覚はないなぁ。
クラスは関連性があるがI/Fは関連性はない(操作方法が同じだというだけ)。
たとえばUNIXはすべてをファイルのように扱えるようにしている(インターフェース)が、デバイスやプロセスは結局のところファイルではない。なのでデバイスやプロセスの親クラスとしてファイルを据えたくない。「is-a」の関係性でいえば「プロセス is not a ファイル」だから。
Re:インタフェースへのデフォルト実装はキモい (スコア:0)
C++から見ると、操作方法が同じだけならテンプレートでいいじゃんとなる。
必要のメソッドを実装してさえいれば全く無関係のクラスを受け取れる。わざわざクラスに継承関係を加える必要がない。
Re: (スコア:0)
そんなに大きな主語の話ではないと思います。(この場合、大きな主語だから悪いとか非難してる話では無いです。)
C++だと、どのクラスか付記すれば関数はどこでも書けますが、Javaだと、Classの波括弧の中にしか書けません。
それでは不便なので、別のところ(インターフェースの波括弧の中)にも書ける様にしたというだけでは無いでしょうか?
もちろんC++みたいに、どこでも書ける様にすればより柔軟性が増すでしょうけど、それではJavaの挟持に反すると
いうものでしょう。