클래스 상속가능한 키워드인 open과 마찬가지로 함수에서도 오버라이드 가능하도록
open 키워드를 붙여준 함수에 한해서 override 키워드를 붙여서 오버라이드(함수 재정의)를 
할수있다.

사용예시)
open class Aclass(var name:String, var age:Int, var type:String)
{
open fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")

}
}
class Dog (name:String, age:Int) : Aclass(name,age,"개")
{
override fun introduce(){
println("Dog 클래스에서 오버라이딩한 함수")
}

}
fun main(){
var a = Aclass("별이",5,"개")
var b = Dog("별이",5)
a.introduce()
b.introduce()
}

추상화)
추상화할 클래스 나 함수에 abstract를 키워드를 붙여준다

사용예시)
abstract class Animal{
abstract fun eat()
fun sniff() {
println("킁킁")
}
}

class Rabbit : Animal(){
override fun eat(){
println("당근을 먹습니다")
}
}
fun main(){
var r = Rabbit()
r.eat()
r.sniff()
}

인터페이스)
구현부가 있는 함수 -> open 함수로 간주
구현부가 없는 함수 -> abstract 함수로 간주

사용예시)

interface Runner {
fun run()
}
interface Eater {
fun eat() {
println("음식을 먹습니다")
}
}
class Dog : Runner, Eater {
override fun run() {
println ("우나나나 뜁니다")
}
}
fun main() {
var d = Dog()
d.run()
d.eat()
}

Posted by 모과이IT
,