# 파생 클래스 선언
package chap02.section1
/* 파생 클래스 생선*/
// 1. 상속 가능한 클래스를 선언하기 위해 open 사용
open class Bird (var name : String, var wing : Int, var beak : String, var color : String){
// 메서드 정의
fun fly() = println("Fly wing : $wing")
fun sing(vol : Int) = println("Sing vol : $vol")
}
// 2. 주 생성자를 사용하는 상속
class Lark(name : String, wing : Int, beak : String, color: String) : Bird(name,wing,beak, color){
// Lark 클래스의 메서드 선언(Lark 인스턴스만 사용가능)
fun singHitone() = println("Happy Song!")
}
// 3. 부 생성자를 사용하는 상속
class Parrot : Bird{ // class Parrot은 class Bird를 상속받는다.
val language : String // class Parrot의 새로운 프로퍼티로 language 추가
// super : 상위 클래스의 메서드,프로퍼티,생성자를 사용하겠다는 키워드
// Parrot의 생성자 선언 (name,wing,beak,color는 상위 클래스의 프로퍼티를 사용하겠다 - super)
constructor(name : String, wing: Int, beak: String, color: String, language : String) : super(name,wing,beak,color){
this.language = language
}
// Parrot 클래스의 메서드 선언(Parrot 인스턴스만 사용가능)
fun speak() = println("Speak! $language")
}
fun main(){
val coco = Bird("mybird",2,"short","blue")
val lark = Lark("mylark",2,"long","brown")
val parrot = Parrot("myparrot",2,"short","multiple","korean") // 프로퍼티 추가
println("Coco : ${coco.name}, ${coco.wing}, ${coco.beak}, ${coco.color}")
println("Lark : ${lark.name}, ${lark.wing}, ${lark.beak}, ${lark.color}")
println("Parrot : ${parrot.name}, ${parrot.wing}, ${parrot.beak}, ${parrot.color}, ${parrot.language}")
coco.sing(3)
lark.singHitone() // 새로 추가한 메서드 사용
parrot.speak() // 새로 추가한 메서드 사용
parrot.sing(3)
lark.fly()
}
# 오버로딩 : 동일한 클래스 안에서 같은 이름의 메서드가 매개변수만 달리해서 여러 번 정의 될 수 있는 개념
package chap02.section1
fun main(){
val calc = Calc()
println(calc.add(3,2)) // 1번째 add 메서드 호출
println(calc.add(3.2,1.3)) // 2번째 add 메서드 호출
println(calc.add(3,3,2)) // 3번째 add 메서드 호출
println(calc.add("hello","world")) // 4번째 add 메서드 호출
}
class Calc{
fun add(x: Int, y: Int) : Int = x + y // 1번째 add 메서드
fun add(x: Double, y: Double) : Double = x + y // 2번째 add 메서드
fun add(x: Int, y: Int, z: Int) : Int = x + y + z // 2번째 add 메서드
fun add(x: String, y: String) : String = x + y // 4번째 add 메서드
}
# 오버라이딩 : 하위 클래스에서 상위 클래스의 메서드와 같은 이름으로 메서드를 정의 할 때 내용을 새로 만들어 재정의 하는 개념
package chap02.section1
/* 메서드 오버라이딩 */
open class Bird(var name : String, var wing : Int, var beak : String, var color : String){
// 메서드 정의
fun fly() = println("Fly wing : $wing")
open fun sing(vol : Int) = println("Sing vol : $vol") // 오버라이딩 가능한 메서드 (open 키워드)
}
class Parrot(name : String, wing : Int = 2, beak: String, color: String, var language : String = "natural") : Bird(name,wing, beak, color){
fun speak() = println("Speak! $language") // Parrot의 메서드 정의
override fun sing(vol : Int){ // Bird class의 sing 메서드를 오버라이딩
println("I'm a Parrot! The Volume level is $vol")
speak()
}
}
fun main(){
val parrot = Parrot(name = "myparrot",beak = "short", color = "multiple") // Parrot 객체 생성
parrot.language = "English" // language 프로퍼티 재선언
println("Parrot : ${parrot.name}, ${parrot.wing}, ${parrot.beak}, ${parrot.color}, ${parrot.language}")
parrot.sing(5) // 오버라이딩 된 메서드 호출
}
'Kotlin' 카테고리의 다른 글
Kotlin - 인터페이스 (0) | 2022.06.14 |
---|---|
Kotlin - super와 this (0) | 2022.06.14 |
Kotlin - 클래스 , 생성자 (0) | 2022.06.14 |
Kotlin - Try~Catch (0) | 2022.06.14 |
함수형 프로그래밍 #2 ★ (0) | 2022.06.13 |