javaやkotlinにおけるオブジェクト指向について教えてください。
学習初期では継承とインターフェースを似たような分類分けで捉えていたのですが、ポリモーフィズムについて学んでいると、そもそもの使用目的が異なるのではないか?と疑問を持ちました。継承は「既存のクラスに機能を追加して、新たに具体的なクラスを作る」ためにあり、インターフェースは「ポリモーフィズムを実現するために、クライアントに使われるためにある」という捉え方は間違っているでしょうか?それとも、抽象クラスを使ってポリモーフィズムを実現することもあるのでしょうか?
よろしくお願いします。
> 抽象クラスを使ってポリモーフィズムを実現することもあるのでしょうか?
あります。
その場合、インターフェースを使うか抽象クラスを使うかは、何を基準に区別されるのでしょうか?
よろしくお願いします。
ぱっと眺めた感じ、これらの記事が参考になりそうです。
https://qiita.com/igayamaguchi/items/e1d35db0a14a84bda452
https://qiita.com/yoshinori_hisakawa/items/cc094bef1caa011cb739
私個人の考え方としては、
抽象クラスは内部を簡略化するために使うもので
インターフェースは外部から同じ方法でアクセスできるようにするために使うって解釈してます。
抽象クラスは実装を持てる代わりに多重継承できません。
インターフェースは(C# のデフォルト実装などの例外を除いて)基本的に実装を持てないかわりに複数使えます。
どちらを使うかはそこから判断してください。
インターフェースは多重実装の問題点を解決するために作られたもので、その意義については以下が参考になると思います。
https://ufcpp.net/study/csharp/oop/oo_multipleinheritance/
ある程度言語は絞られたほうが良いと思います。
m.ts10806さんのおっしゃる通り、言語絞った方がいいかと思います。
そもそも、クラスやインターフェースの仕様が違う場合もありますので。
はい、すみません。javaやkotlinでよろしくお願い致します。
なるほどです。
質問タグに、Java、Kotlinもありますので、
追加されると、より回答つきやすくなると思います。
失念しておりました。ご指摘ありがとうございます。
ポリモーフィズムとは何と定義されているでしょうか。
まぁ、実際のところは(木綿豆腐と絹(ごし)豆腐の違いみたいな)そんな面倒なことは考えず、必要な所に必要な構造で必要な処理を書くだけです。
その基準が知りたいというのであれば、実際にコードを色々書いてみてください。書かずに机上で論理を弄り回すだけでは何の実感も得られません。