글
[Kotlin] 클래스 정리
Android (Kotlin)
2020. 9. 13. 18:50
Class 기본 사용
class User {
var loggedIn: Boolean = false
val cantChangeValue = "Hi"
fun logOn() {
loggedIn = true
}
fun logOff() {
loggedIn = false
}
}
fun main(args: Array<String>) {
val user = User()
println(user.loggedIn) //false
user.logOn()
println(user.loggedIn) //true
user.logOff()
println(user.loggedIn) //false
user.cantChangeValue = "Hey" //won't compile. Can't modify a final variable.
}
Class 생성자 "init"
예 1.) =============================
class MultiInit(name: String) {
init {
println("First initializer block that prints ${name}")
}
init {
println("Second initializer block that prints ${name.length}")
}
}
fun main(args: Array<String>) {
var multiInit = MultiInit("Kotlin")
}
출력>>>>>>>
I/System.out: First initializer block that prints Kotlin
I/System.out: Second initializer block that prints 6
예 2.) ========= With "also"===========
class MultiInit(name: String) {
val firstProperty = "First property: $name".also(::println)
init {
println("First initializer block that prints ${name}")
}
val secondProperty = "Second property: ${name.length}".also(::println)
init {
println("Second initializer block that prints ${name.length}")
}
}
fun main(args: Array<String>) {
var multiInit = MultiInit("Kotlin")
}
출력>>>>>>>
I/System.out: First property: Kotlin
I/System.out: First initializer block that prints Kotlin
I/System.out: Second property: 6
I/System.out: Second initializer block that prints 6
Class 보조 생성자 "constructor"
class Student {
var name: String
val age : Int
constructor(name: String, age: Int)
{
this.name = name
this.age = age
}
fun printDetails()
{
println("Name is $name and Age is $age")
}
}
fun main(args: Array<String>) {
var student = Student("gugu", 17)
student.printDetails()
}
출력 >>>>>>>>
//Name is gugu and Age is 17
init + constructor
class Student(var name: String, val age: Int) {
var skill: String
init {
skill = "play"
}
constructor(name: String, age: Int, skill: String) : this(name, age) {
this.skill = skill
}
fun printDetails() {
if (skill.equals("play"))
println("Name is $name and Age is $age")
else
println("Name is $name and Age is $age Skill is $skill")
}
}
I/System.out: Name is no-b-rain and Age is 1
I/System.out: Name is dudu and Age is 20 Skill is dodory
생성자의 인수 , 인수의 기본값 설정
예 1.)
class User(name: String, val isAdmin: Boolean) {
var username = name //username = name
val _isAdmin = isAdmin //_isAdmin = isAdmin
init {
username= username + "https://no-b-rain.tistory.com/"
println("Author Name is $name. Is Admin? $_isAdmin")
}
}
fun main(args: Array<String>) {
var user = User("no-b-rain",false)
// Error Code : user.isAdmin = true //won't compile since isAdmin is val
// Error Code : user._isAdmin = true //won't compile. Same reason.
user = User("no-Brain",true)
}
예 2.)
class User(name: String, var website: String = "no-b-rain") {
init {
println("Author $name writes at $website")
}
init {
website = website + ".com"
println("Author $name writes at $website")
}
}
fun main(args: Array<String>) {
var user = User("no-b-rain","dudu")
user = User("no-Brain","dudu")
}
I/System.out: Author no-b-rain writes at dudu
I/System.out: Author no-b-rain writes at dudu.com
I/System.out: Author no-Brain writes at dudu
I/System.out: Author no-Brain writes at dudu.com
커스텀 setter , getter
class Name{
var post: String = "default"
set(value) {if(!post.isNotEmpty()) {
throw IllegalArgumentException(" Enter a valid name")
}
field = value
}
get() {
return field.capitalize()
}
}
fun main(args: Array<String>) {
var name = Name()
name.post = "kotlin classes"
println(name.post)
name.post = "kotlin data Classes our next Tutorial"
println(name.post)
}
abstract
abstract class Person(name: String) {
init {
println("Abstract Class. init block. Person name is $name")
}
abstract fun displayAge()
}
class Teacher(name: String): Person(name) {
var age : Int
init {
age = 24
}
override fun displayAge() {
println("Non-abstract class displayAge function overridden. Age is $age")
}
}
fun main(args: Array<String>) {
val person = Teacher("Anupam")
person.displayAge()
}
//Following is printed in the console.
//Abstract Class. init block. Person name is Anupam
//Non-abstract class. Age is 24
'Android (Kotlin)' 카테고리의 다른 글
[안드로이드] TTS (TextToSpeech) 예제 (0) | 2020.10.11 |
---|---|
[Kotlin] DataClass (0) | 2020.09.14 |
[Kotlin] 제어문 for , forEach , range , repeat , when (0) | 2020.09.13 |
[Kotlin] let 과 also , Elvis 연산자 와 Null 값 필터링 (0) | 2020.09.13 |
[Kotlin] Array 배열 (0) | 2020.09.13 |