오버라이딩
- 오버라이딩은 부모-자식 상속 관계에 있는 클래스에서 상위 클래스의 메서드를 하위 클래스에서 재정의하는 것을 말한다.
- 오버라이딩을 하기 위해서는 하위 클래스에서 선언하려는 멤버가 상위 클래스의 멤버와 이름과 형태가 동일해야 하며 함수가
open
되어 있어야 한다.
fun main() {
Animal().printSound()
Dog().printSound()
Cat().printSound()
}
open class Animal() {
open fun printSound() { 하위 클래스에서 선택적으로 override 할 수 있다.
println("growl growl!")
}
}
class Dog: Animal() {
override fun printSound() {
println("bark bark!")
}
}
class Cat: Animal() {
override fun printSound() {
println("mew mew!")
}
}
오버로딩
- 오버로딩은 이름이 동일한 함수이긴 한데 매개 변수의 개수가 다르거나 매개 변수의 자료형이 다른 함수를 가리키는 용어이다.
- 같은 이름의 함수로 다른 기능을 할 수 있게 한다.
- 반환 타입은 오버로딩에 영향을 주지 않으며 매개변수의 타입과 개수가 동일한 함수일 경우 반환 타입이 다르면 안 된다.
fun main() {
sum(5, 10)
sum(1.0, 2.0)
}
fun sum(x:Int, y:Int){
println(x + y)
}
fun sum(x:Double, y:Double){
println(x + y)
}
fun main() {
sum(5, 10)
sum(1, 2, 3)
}
fun sum(x:Int, y:Int){
println(x + y)
}
fun sum(x:Int, y:Int, z:Int){
println(x + y + z)
}