📂Kotlin14_Inherite ~ 📂Kotlin20_Overriding
클래스를 설계할 때 다른 클래스가 가지고 있는 부분을 물려 받는 것
open
키워드 사용, 사용하지 않으면 Java 코드로 변경될 때 final
키워드 붙어 상속 불가fun main() {
val s1 = SubClass1()
println("s1.subMember1 : ${s1.subMember1}")
s1.subMethod1()
println("s1.superMember1 : ${s1.superMember1}")
s1.superMethod1()
}
// 부모 클래스
open class SuperClass {
var superMember1 = 100
constructor() {
println("SuperClass의 기본 생성자")
}
fun superMethod1() {
println("SuperClass1의 메서드 입니다")
}
}
// 자식 클래스
class SubClass1 : SuperClass() {
val subMember1 = 200
fun subMethod1() {
println("SubClass1의 메서드 입니다")
}
}
open class SuperClass2(var a1: Int)
class SubClass2 : SuperClass2 {
// 부모의 생성자를 호출한다.
constructor() : super(100) {
// 코드
}
}
// 만약 생성자에 작성할 코드가 없다면..
class SubClass3 : SuperClass2(100)
📂Kotlin14_Inherite
kt 파일들을 폴더 별로 나누어 관리하는 개념
📂Kotlin16_PackageModule
패키지들을 모아 관리하는 개념
📂Kotlin16_PackageModule
생략 시 public으로 설정되고 internal은 같은 모듈이라면 public가 동일
📂Kotlin17_AccessModifier
캡슐화가 적용된 변수에 대해 메서드를 통해 값을 설정하거나 가져다 사용할 수 있도록 구성한 것
class TestClass1(var a1: Int, val a2: Int)
class TestClass2 {
var v1 = 0
val v2 = 0
// getter/setter를 원하는 대로 만들고 싶다면? 아래처럼!
var v3 = 0
get() {
// 코드
return ~~
}
set() {
// 코드
}
val 4 = 0
get() {
// 코드
return ~~
}
}
📂Kotlin18_Property
프로퍼티의 값을 나중에 셋팅할 때 지연 초기화를 사용
lateinit var a1: String
val a1: Int by lazy {
val temp = 1 + 2 + 3 + 4 + 5
temp
}
📂Kotlin19_LateInit
부모 클래스가 가지고 있는 메서드를 자식 클래스에서 재정의하는 개념
final
붙어있으면 overriding 불가, overriding이 가능하게 하기 위해서 open
키워드 사용override
라는 키워드를 붙혀주도록 강제하고 있음fun main() {
val obj1 = SubClass()
obj1.superMethod()
val obj2: SuperClass = SubClass()
obj2.superMethod()
}
open class SuperClass {
var superA1 = 300
open fun superMethod() {
println("SuperClass의 superMethod 입니다")
}
}
class SubClass : SuperClass() {
override fun superMethod() {
// 부모의 메서드 호출
super.superMethod()
println("SubClass의 superMethod 입니다")
}
}
super
키워드 사용super
는 상속관계에서 부모를 의미fun main() {
val obj1 = SubClass()
println("obj1.subA1 : ${obj1.subA1}")
println("obj1.superA1 : ${obj1.superA1}")
obj1.subMethod()
obj1.superMethod()
}
open class SuperClass {
var superA1 = 100
fun superMethod() {
println("SuperClass의 superMethod 입니다")
}
}
class SubClass : SuperClass() {
var subA1 = 200
fun subMethod() {
println("SubClass의 subMethod 입니다")
}
}
fun main() {
var obj2: SuperClass = SubClass()
println("obj2.superA1 : ${obj2.superA1}")
obj2.superMethod()
}
open class SuperClass {
var superA1 = 100
fun superMethod() {
println("SuperClass의 superMethod 입니다")
}
}
class SubClass : SuperClass() {
var subA1 = 200
fun subMethod() {
println("SubClass의 subMethod 입니다")
}
}
📂Kotlin20_Overriding