### class
class User { var name = "Me!" fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val user = User() println(user.name) user.sayHi() user.name = "steve" println(user.name) user.sayHi() }
constructor
->classの引数の渡し方はmethodと同様に型を指定する
class User(var name: String) { // constructor var team = "red" init { println("instance created: name: $name, team: $team") } fun sayHi(){ println("hi $name") } } fun main(args: Array<String>){ val tom = User("tom") println(tom.name) tom.sayHi() }
instance created: name: tom, team: red
tom
hi tom
### getter, setter
// getter // get(){ // return field.toUpperCase() // } get() = field.toUpperCase() // setter set(value) { if(value != ""){ field = value } }
### override
継承される側はopenを付ける
class AdminUser(name: String): User(name){ fun sayHello(){ println("hello $name") } override fun sayHi(){ println("[admin] hi $name") } } open class User(var name: String){ open fun sayHi(){ println("hi $name") } } fun main(args: Array<String>) { val bob = AdminUser("bob") println(bob.name) bob.sayHello() bob.sayHi() }
### アクセス修飾子
public:どこからでも、protected: そのクラス+サブクラス、private:そのクラスのみ
-> アクセスをcontrollすることで安全なプログラムを書ける
### 拡張
fun User.sayHi(){ println("[ext] hello $name") } val User.myName: String get() = "I am $name" open class User(var name: String){ fun sayHi(){ println("hi $name") } } fun main(args: Array<String>) { val bob = User("bob") println(bob.name) bob.sayHi() }
### 抽象クラス・具象クラス
抽象クラスはabstractとする
abstract class User{ abstract fun sayHi() } class Japanese: User() { override fun sayHi(){ println("こんにちは!") } } class American: User() { override fun sayHi(){ println("Hi!") } } fun main(args: Array<String>) { val tom = American() val aki = Japanese() tom.sayHi() aki.sayHi() }
### Interface
抽象プロパティ、抽象メソッド、メソッド
interface Sharable { val version: Double fun share() fun getInfo(){ println("Share I/F ($version)") } } class User: Sharable { override val version = 1.1 override fun share(){ println("Sharing ...") } } fun main(args: Array<String>) { val user = User() user.share() user.getInfo() }