Part13: 続・クラス

ことり「今回もクラスを見ていきますね」
凛「CYaRon!のデビュー曲聴いて元気いっぱいの凛に恐れるものなどないにゃ!」
ことり「前速前進DAY!DAY!DAY!・・・だっけ」
凛「それは曜ちゃんに謝るべきにゃ」
ことり「というかCYaRon!はおおむねPrintempsだしGuilty KissはBiBiだしAZALEAはlily white」
凛「ことりちゃん」
ことり「トリオユニットの構成は私たちで完成されていたのに、どうしてAqoursから斬新な何かが出てくると錯覚していたの?」
凛「・・・ん?錯覚・・・?」

ことりん「「それでは聴いてください。錯覚CROSSROADS」」


凛「・・・見事に乗せられてしまったにゃ・・・」
ことり「これはDisってるんじゃなくて、正面からμ’sのトリオユニットを超えてみせてね、って意味ですよ♪」


継承

ことり「基本的なクラスの作り方は前回やったけど、今回はまずクラスの継承から見てみましょう」
凛「オブジェクト指向はよくわからないんだにゃ」
ことり「あるクラスを拡張して、別のクラスを作ることができます。モデリング的には特化ともいうね」

honoka singing!!
honoka dancing!!
honoka studying…
いちご
Otonokizaka High.

ことり「IdolSchoolIdolの2つのクラスがあります。SchoolIdolクラスはIdolクラスを継承して作っています」
凛「アイドルができることはスクールアイドルもできるってこと?」
ことり「そうだね。出力結果にあるみたいに、SchoolIdolのインスタンスはIdolのメンバも利用できます。singとかdanceが呼べたりね」
凛「付け加えたい差分だけ実装すればいいんだね」
ことり「継承元になるクラスにはopenをつけます。Javaのfinalの逆で、これをつけないと継承できないんだよ」


関数のオーバーライド

ことり「関数のオーバーライド、つまり継承によるスーパークラスの関数の上書きについても見ておきましょう」

I am Idol!!
I am SchoolIdol!!

ことり「IdolクラスとSchoolIdolクラスに、同じ名前で処理の違うhello関数があります」
凛「どっちのインスタンスに対して呼び出すかで処理が変わるんだよね」
ことり「うん。そのためには、まずスーパークラスの側で関数にopenをつけます。クラスの継承と同じで、これがないとオーバーライドできないよ」
凛「基本的には継承とかさせない思想?」
ことり「Javaとはホワイトリストとブラックリストの違いみたいなものかな。許可するものだけキーワードつけるか、許可しないものだけキーワードつけるか」
凛「Kotlinがホワイトリストなのは、その方が安全ってことなのかな」
ことり「どっちかが絶対安全ってことはないけど・・・あと、関数のオーバーライドではサブクラスの側ではoverrideをつけます」
凛「こっちはまあ、キーワードついてれば何かをオーバーライドしてるってわかりやすいからいいにゃ」


抽象クラス

ことり「インスタンスを作れない抽象クラスというのもあります」

I am SchoolIdol!!
My name is Honoka Kosaka
I am ProfessionalIdol!!
My name is Uzuki Shimamura

ことり「abstractがついてるIdolクラスからはインスタンスが生成できなくなります」
凛「なんでそんなことするにゃ?」
ことり「抽象クラスはクラスをグルーピングする意味合いと、それに共通の実装を提供するというのが主な目的かな」
凛「SchoolIdolとかProfessionalIdolIdolの一種なのはわかるとして・・・共通の実装っていうのは、sayName関数とか?」
ことり「うん。Idolであれば誰でもsayNameで名前を言えます。けど、hello関数はabstractだから、サブクラスで必ずオーバーライドしないといけないの」


Sealed

ことり「少し特殊な継承制限で、sealedっていうのがあります。自身の内部クラス、ネステッドとかインナーとかね、それに対してだけ継承を許すの」

ことり「whenとかで使う選択肢なんかに使うことが多いみたい」
凛「これまで見てきたクラスの使い方とは少し違う気がするね」


ことり「基本的なクラスの定義についてはこれくらいかな。けど、クラスに関係することで勉強することはまだいーっぱいあるよ」
凛「いーっぱい?」
ことり「いーっぱい」
凛「いーっぱい・・・」


LINEで送る
Pocket


返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です