super class : 속성과 함수를 물려주는 쪽
sub class : 속성과 함수를 물려받는 쪽
상속 사용 예제 코드
fun main(){
}
open class Animal (var name:String, var age:Int, var type:String){ //*open
fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")
}
}
*open : 클래스가 상속될 수 있도록 클래스 선언 시 붙여줄 수 있는 키워드
fun main(){
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
a.introduce()
b.introduce() //모두 같은 내용을 출력한다.
}
open class Animal (var name:String, var age:Int, var type:String){ //*open
fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")
}
}
class Dog (name:String, age:Int ) : Animal(name, age, "개"){//var, val 등을 사용하지 않는다.
}
dog 클래스는 생성자에서 이름과 나이를 받기는 하지만 클래스의 자체 속성으로 만들어주는 var, val을 붙이지 않고, 일반 파라미터로 받아 Animal 클래스의 생성자에 직접 넘겨준다.
*var, val 등을 붙이면 속성으로 선언된다.
서브 클래스인 Dog만의 자체 함수를 만들어 보자
fun main(){
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
a.introduce()
b.introduce()
b.Bark() //멍멍
}
open class Animal (var name:String, var age:Int, var type:String){ //*open
fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")
}
}
class Dog (name:String, age:Int ) : Animal(name, age, "개"){//var, val 등을 사용하지 않는다.
fun Bark(){
println("멍멍")
}
}
fun main(){
var a = Animal("별이", 5, "개")
var b = Dog("별이", 5)
a.introduce()
b.introduce()
b.Bark()
var c = Cat("루이", 1)
c.introduce()
c.meow()
}
open class Animal (var name:String, var age:Int, var type:String){ //*open
fun introduce(){
println("저는 ${type} ${name}이고, ${age}살 입니다.")
}
}
class Dog (name:String, age:Int ) : Animal(name, age, "개"){//var, val 등을 사용하지 않는다.
fun Bark(){
println("멍멍")
}
}
class Cat(name:String, age:Int) : Animal (name, age, "고양이") {
fun meow(){
println("야용")
}
}
장점 : 클래스를 더 구조적으로 다룰 수 있게 해준다.
단점 : 지나친 상속 구조는 코드를 더 어렵게 만들 수 있다
참고자료
디모의 코틀린 강좌