背景
scalaに触れていく中で、traitとclassの違いってなんや!objectってどこでどんな風に使うんや!ってなったので自分なりの理解を残しておきます。
抽象と具体
これらの理解を深めるために抽象的なものと具体的なものに分けようと思います。
プログラミング的に抽象的なものとしては全体として知っている知識、具体的なものとしてはその具体実装を指します。
抽象
タイトルで示した4つのうち、traitとabstract classが抽象的なものに当たります。
具体
具体にはclassとobjectが入ります。
違い
ほんならそれらの違いってなんやねん!となると思うのですが、説明していきます。
trait => can doの関係
abstract class => is a の関係
という説明を受けてなるほど!となりました。
つまり、"犬は吠えることができる"なのか"犬は動物だ"なのかの違いですね。
このように抽象的なものを使い分けることができます。
class => newしてあげる必要があり、いっぱい作れる
object => singletonなもの。唯一定義してあげたいもの。
のような違いがあります。
このような認識で今後は使い分けていきたい。