이글은 유튜브 강좌 <디모의 코틀린> 강좌를 보고 요약작성한 글 입니다.
https://www.youtube.com/playlist?list=PLQdnHjXZyYadiw5aV3p6DwUdXV2bZuhlN
강좌를 보고 싶은 분은 위 링크를 통해 공부하실수 있습니다.
inheritance(상속) :
1. 상속받은 재산, 유산, 상속
2. (과거·선대로부터 물려받는) 유산, 유전(되는 것)
: 관련된 부모(상위개념)으로 무언가를 물려 받는 것.
'차두리'가 '차범근의 신체적 능력' 을 물려받은 것처럼... 그런느낌?
'상속'의 네이버 사전적 의미
https://en.dict.naver.com/#/entry/enko/1e1ab2e0ac314025a2a6020c31bdebfa
프로그래밍에서는 아래 처럼 부른다.
부모 = 수퍼 클래스
자식 = 서브 클래스
1. 자식은 A 속성을 부모로 부터 받고,
2. 자신만이 가지는 속성 B 를 생성하였다.
class Car // 상속이 불가능
open class Engine // '부모' 의 역할로 상속 가능
- 수퍼 클래스(부모)에 존재하는 속성과 '같은 이름의 속성'을 가질수 없음
- 서브 클래스(자식)가 생성될때는, 반드시 수퍼 클래스(부모)의 생성자까지 호출되어야 함.
코드를 보면서 이해해보자.
open class Animal (var name:String, val age:Int, var type:String)
{
fun introduce() {
println("저는 ${type} ${name}이고 ${age}살 입니다.")
}
}
class Dog (name:String, age:Int) : Animal (name, age, "개")
{
}
- 여기서 알아야 할것
파라미터 생성시 val, var 을 쓰면, 파라미터로 적용됨과 동시에 해당 클래스의 속성으로 만들어 진다.
그러므로,,,
- 해당 클래스의 속성으로 사용할것 인지,
- 부모의 속성을 이용한 파라미터로만 사용할것 인지,
고민하고 작성해야 한다.
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, val age:Int, var type:String)
{
fun introduce() {
println("저는 ${type} ${name}이고 ${age}살 입니다.")
}
}
class Dog (name:String, age:Int) : Animal (name, age, "개")
{
fun bark(){
println("멍멍!!")
}
}
class Cat (name:String, age:Int) : Animal (name, age, "고양이")
{
fun meow(){
println("야옹야옹~~")
}
}
결과 :
저는 개 별이이고 5살 입니다.
저는 개 별이이고 5살 입니다.
멍멍!!
저는 고양이 루이이고 1살 입니다.
야옹야옹~~
다음은 '오버라이딩과 추상화' 에 대해 알아보겠음!!