Java経験者のKotlin コンストラクタ、インターフェース、継承
Javaのあの機能、Kotlinだとどう書くの?という視点でメモを残しておきます。クラスの宣言
最小限の宣言は以下になります。
class [クラス名]
例)
class Some
コンストラクタの引数を取らず、sayというメソッドを持つクラス
- class Some {
- fun say() {
- println("Hello, World!")
- }
- }
- fun main() {
- // インスタンスを生成して直接使用
- Some().say()
- // 変数に入れてもよし newキーワードは不要
- val s = Some()
- s.say()
- }
コンストラクタで引数を取る場合、クラス名の後に()を付けて引数を記載。
- class Some(name: String) {
- private val localname = name
- fun say() {
- println("Hello, $localname!")
- }
- }
- fun main() {
- // インスタンスを生成して直接使用
- Some("Symfo").say()
- }
代入せず、引数を直接クラスのプライベート変数として割り当てることも可能です。
- class Some(private val name: String) {
- fun say() {
- println("Hello, $name!")
- }
- }
- fun main() {
- // インスタンスを生成して直接使用
- Some("Ware").say()
- }
クラスの継承
クラスはデフォルトでjavaで言うところのfinalが付与されるようです。
継承可能なクラスとするには、classの前にopenキーワードを付与します。
継承先クラスでは、コロンに続いて継承元クラスのコンストラクターを指定します。
継承元クラス
open class [クラス名]
使用するクラス
class [クラス名] : [継承元クラス名]()
- open class Some(public val name: String) {
- fun say() {
- println("Hello, $name!")
- }
- }
- class SomeEx(name: String) : Some(name) {
- fun sayex() {
- say()
- println("こんにちは、$name")
- }
- }
- fun main() {
- // インスタンスを生成して直接使用
- SomeEx("Ware").sayex()
- }
インターフェース
インターフェースの宣言は、interfaceです。
クラスの継承と同様、コロンの後に継承するインターフェースを記載します。
- interface Iface {
- fun someFunction()
- }
- open class Some(public val name: String) : Iface{
- fun say() {
- println("Hello, $name!")
- }
- // Iface.someFunctionの実装部分
- // overrideを付与
- override fun someFunction() {
- }
- }
クラスとインターフェース両方継承する場合は、継承クラスに続いてカンマで区切りクラス名を記載します。
- interface Iface {
- fun someFunction()
- }
- open class Some(public val name: String) {
- fun say() {
- println("Hello, $name!")
- }
- }
- class SomeEx(name: String) : Some(name), Iface {
- fun sayex() {
- say()
- println("こんにちは、$name")
- }
- // Iface.someFunctionの実装部分
- // overrideを付与
- override fun someFunction() {
- }
- }
コメント