[코틀린기초] 23. 다형성
같은 이름을 사용하지만 구현 내용이 다르거나 매개변수가 달라 하나의 이름으로 다양한 기능을 수행할 수 있는 개념
## 정적 다형성
- 컴파일 타임에 결정되는 다형성
- 메서드 오버로딩을 사용할 때
## 동적 다형성
- 동적으로 구성되는 오버라이딩된 메서드를 사용할 때
## 오버로딩
- 기능은 같지만 인자를 다르게 하여 여러 경우를 처리
- print(123), print(“123”) 인자는 다르지만 출력의 기능은 동일함
## 오버라이딩
- 기능을 완전히 다르게 바꾸어 설계
- push()는 확인 또는 취소 용도로 서로 다른 기능을 수행 할 수 있음
- 오버라이딩을 허용하는 메서드나 프로퍼티는 open 키워드를 사용하고, 오버라이딩 된 메서드는 프로퍼티는 override 키워드를 사용한다.
-
오버라이딩을 금지하고 싶다면? final 키워드를 사용한다. ``` //상속 가능한 클래스 open class Bird(var name:String. var wing: Int, var beak: String){
// 오버라이딩 가능한 메서드 open fun fly(){ println(“Fly”) } }
//상속한 클래스 open class Lark(name: String, wing: Int, beak: String) : Bird(name, wgin, beak){
//오버라이드한 메서드. 하위 클래스에서 오버라이드가 불가능하다.
final override fun fly(){
println("Quick Fly")
}
fun singHitne(){
println("sing Hitone")
} } ```