「Android/kotlin/クラス」の版間の差分
提供: 初心者エンジニアの簡易メモ
(ページの作成:「==アクセス修飾子== * public, protected, private, internal の4つ * javaはデフォでinternalだが、kotlinはpublicとなる。」) |
(→継承(他言語でよくある書き方でkotlinでは非推奨かも)) |
||
| (同じ利用者による、間の7版が非表示) | |||
| 行2: | 行2: | ||
* public, protected, private, internal の4つ | * public, protected, private, internal の4つ | ||
* javaはデフォでinternalだが、kotlinはpublicとなる。 | * javaはデフォでinternalだが、kotlinはpublicとなる。 | ||
| + | |||
| + | ==クラス呼び出し== | ||
| + | MainActivity.kt | ||
| + | class MainActivity : AppCompatActivity() { | ||
| + | override fun onCreate(savedInstanceState: Bundle?) { | ||
| + | super.onCreate(savedInstanceState) | ||
| + | setContentView(R.layout.activity_main) | ||
| + | var user = User() | ||
| + | var name = user.getName() // 型なし | ||
| + | var name2: String = user.getName() // 型指定もできる | ||
| + | Log.i("test", "name=" + name) | ||
| + | var logic = SampleLogic() | ||
| + | logic.execLogic() | ||
| + | } | ||
| + | } | ||
| + | User.kt | ||
| + | class User { | ||
| + | fun getName(): String { | ||
| + | return "taro" | ||
| + | } | ||
| + | } | ||
| + | SampleLogic.kt | ||
| + | class SampleLogic { | ||
| + | fun execLogic() { | ||
| + | Log.i("test", "SampleLogic exec") | ||
| + | return | ||
| + | } | ||
| + | } | ||
| + | 戻りの型がない場合はUnit(javaでいうvoid)を指定したことになる。型がない状態で、return "hoge"とかにするとエラーとなる。 | ||
| + | |||
| + | ==setter/getterについて== | ||
| + | MainActivity.kt | ||
| + | <pre> | ||
| + | var user = User() | ||
| + | user.name = "taro" | ||
| + | Log.i("MainActivity", user.name) | ||
| + | </pre> | ||
| + | User.kt | ||
| + | <pre> | ||
| + | import android.util.Log | ||
| + | class User { | ||
| + | var name: String = "" | ||
| + | get() { | ||
| + | Log.i("User", "get name=" + field) | ||
| + | return field | ||
| + | } | ||
| + | set(value) { | ||
| + | Log.i("User", "set name=" + value) | ||
| + | field = value | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | get()とset()はfunction中にロジックを記述したいときだけ追加する。省略しても値は設定取得できる。 | ||
| + | |||
| + | ==継承== | ||
| + | Animal.kt | ||
| + | <pre> | ||
| + | open class Animal(foot: Int) { | ||
| + | var foot = 0 | ||
| + | init { | ||
| + | this.foot = foot | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | Cat.kt | ||
| + | <pre> | ||
| + | class Cat() : Animal(4) { | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | MainActivity.kt | ||
| + | Log.i("test", "cat.foot=" + Cat().foot); // 4 | ||
| + | |||
| + | ==継承(他言語でよくある書き方でkotlinではセカンダリコンストラクタは非推奨)== | ||
| + | Animal.kt | ||
| + | <pre> | ||
| + | open class Animal { | ||
| + | var foot = 0 | ||
| + | constructor(foot: Int) { | ||
| + | this.foot = foot | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | Cat.kt | ||
| + | <pre> | ||
| + | class Cat : Animal { | ||
| + | constructor() : super(4) {} | ||
| + | } | ||
| + | </pre> | ||
| + | |||
| + | ==継承クラスについて== | ||
| + | constructorをつけたり | ||
| + | <pre> | ||
| + | open class Animal constructor(foot: Int) { | ||
| + | var foot = 0 | ||
| + | init { | ||
| + | this.foot = foot | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
| + | パラメータ側にvarをつけたりできる | ||
| + | <pre> | ||
| + | open class Animal constructor(var foot: Int) { | ||
| + | init { | ||
| + | this.foot = foot | ||
| + | } | ||
| + | } | ||
| + | </pre> | ||
2020年2月27日 (木) 17:41時点における最新版
目次
アクセス修飾子
- public, protected, private, internal の4つ
- javaはデフォでinternalだが、kotlinはpublicとなる。
クラス呼び出し
MainActivity.kt
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
var user = User()
var name = user.getName() // 型なし
var name2: String = user.getName() // 型指定もできる
Log.i("test", "name=" + name)
var logic = SampleLogic()
logic.execLogic()
}
}
User.kt
class User {
fun getName(): String {
return "taro"
}
}
SampleLogic.kt
class SampleLogic {
fun execLogic() {
Log.i("test", "SampleLogic exec")
return
}
}
戻りの型がない場合はUnit(javaでいうvoid)を指定したことになる。型がない状態で、return "hoge"とかにするとエラーとなる。
setter/getterについて
MainActivity.kt
var user = User()
user.name = "taro"
Log.i("MainActivity", user.name)
User.kt
import android.util.Log
class User {
var name: String = ""
get() {
Log.i("User", "get name=" + field)
return field
}
set(value) {
Log.i("User", "set name=" + value)
field = value
}
}
get()とset()はfunction中にロジックを記述したいときだけ追加する。省略しても値は設定取得できる。
継承
Animal.kt
open class Animal(foot: Int) {
var foot = 0
init {
this.foot = foot
}
}
Cat.kt
class Cat() : Animal(4) {
}
MainActivity.kt
Log.i("test", "cat.foot=" + Cat().foot); // 4
継承(他言語でよくある書き方でkotlinではセカンダリコンストラクタは非推奨)
Animal.kt
open class Animal {
var foot = 0
constructor(foot: Int) {
this.foot = foot
}
}
Cat.kt
class Cat : Animal {
constructor() : super(4) {}
}
継承クラスについて
constructorをつけたり
open class Animal constructor(foot: Int) {
var foot = 0
init {
this.foot = foot
}
}
パラメータ側にvarをつけたりできる
open class Animal constructor(var foot: Int) {
init {
this.foot = foot
}
}
