kotlin

kotlin基本構文-パッケージ,継承,final修飾子,abstract,多態性,ダウンキャストとSmart cast,インターフェース

投稿日:

参考にしている書籍が薄すぎて悲しくなるが、サクサクっと読み進めてみる。
やはりJavaだからかクラス関係の記述が多いな。

パッケージのインポート

kotlinのインポート構文はJava相当の書き方ができる。
パッケージfoo.barに含まれるgooクラスをインポートする書き方と、
foo.barに含まれる全てのクラスをインポートする(static import)書き方は以下。

kotlinはパッケージのトップレベルにクラスだけでなく関数を置けるので、
import構文も関数を指定することができる。
foo.barパッケージのトップレベルにあるgetValue()をインポートする書き方は以下。

別パッケージの同一クラスをimportする際には、
Javaでは完全修飾して書かないといけないが、kotlinではas予約語を使って別名でインポートすれば良い。

継承

kotlinのクラスはデフォルトでfinal。デフォルトで継承できない。
open修飾子をつけることでfinalが外れ、継承できるようになる。

オブジェクト指向モデリングを少しかじると、やたら継承関係を作りたくなる参考書が多くて、
継承関係でないのにやたら継承関係にする人が多いと聞いたな...。

継承はextendsではなく「:」。
派生クラスのプライマリコンストラクタで基底クラスのプライマリコンストラクタを呼んでいる。
関数(kotlinはクラスのメンバ関数をメソッドと呼ばないで関数と呼ぶらしい)のデフォルトもfinal。

派生クラスがプライマリコンストラクタを持たない場合、
基底クラスのコンストラクタを呼ぶ書き方が別にある。
super()で基底クラスのコンストラクタを呼び出す。

メンバ関数のデフォルトがfinalということは、
openなメンバ関数をoverrideした後、finalに戻す責任があるということ。
派生は悪、という宣言。。

抽象クラス、抽象メソッド

抽象クラス、抽象メソッドはabstract予約語を使う。
指定位置は予想の通りで特別な印象はない。

多態性と異種リスト

多態性と異種リストのサンプル。何も難しいことはない。

ダウンキャストとSmart Cast

派生クラスの固有メンバ関数を呼び出すとき、インスタンスのis a関係をチェックしてから
派生クラスにダウンキャストして呼ぶのが普通だと思っていたけども、
kotlinは、is a関係のチェックとダウンキャストを自動的に行ってくれる。

以下の通り、animalインスタンスのis aチェックを行ったあと、
animal.how()および、animal.groom()のコンテキストでは、
animalがそれぞれDog,Catのダウンキャストとなっている。

インターフェース

kotlinは多重継承をサポートしていない。
振る舞いを複数に分割しておいて必要な振る舞いを実装するモデル。
振る舞いはインターフェース(純粋仮想クラス)として書くようになっている。
インターフェースはabstract関数(ex. breath())だけでなくデフォルト実装(ex.sleep())を持てる。
当然、クラスは複数のinterfaceを実装できる。

インターフェースの名前解決

kotlinではインターフェースがデフォルト実装を持てるので、
実装クラス側から定義済みのデフォルト実装を呼ぶケースがある。
もし、実装する複数のインターフェースが同じ名称を持つメンバ関数を持っていた場合、
競合する複数のメンバ関数から
どれを呼ぶのか解決する必要がある。
実装クラスからインターフェースを参照する場合には、super予約語を使う。

-kotlin
-

Copyright© ikuty.com , 2018 AllRights Reserved Powered by AFFINGER4.