▷ 클래스를 설계할 때 다른 클래스가 가지고 있는 부분을 물려 받는 것을 의미한다. ▷ 이를 통해 클래스마다 중복된 부분을 클래스 한 곳에 만들 수 있다.
상속을 하는 클래스를 부모 클래스(SuperClass)라고 하며 상속을 받는 클래스를 자식 클래스(SubClass)라고 한다.
상속
▶ 하나의 클래스가 다른 클래스에 작성한 요소를 물려받는 개념 ▶ 클래스를 통해 객체를 생성하면 클래스에 작성한 부분 뿐만 아니라 물려주는 쪽이 가지고 있는 부분도 가지고 있게 된다. ▶ 물려 주는 쪽을 부모클래스(Super Class)라고 부르고 물려 받는 쪽을 자식 클래스(Sub Class)라고 부른다.
▷ 코틀린에서 부모 클래스의 역할을 할 수 있도록 하겠다면 open 키워드를 붙혀 줘야 한다.
fun main(){
//자식 클래스를 통해 객체를 생성한다.
val s1 = SubClass1()
println(s1.superA1)
println(s1.subA2)
s1.superMethod1()
s1.subMethod2()
//부모 클래스의 객체를 생성한다
val s2 = SuperClass1()
// 부모클래스는 자식클래스에 작성한 요소를 사용할 수 없다.
// 부모클래스를 작성할 당시에는 자식 클래스가 어떤 것들이 있는지 알수도 없고
// 부모클래스 작성 코드에는 자식클래스가 무엇인지 명시하는 곳이 없기 때문에
// 객체를 생성할 때 자식클래스 부분을 생성할 수 없다.
// 오류
// println(s2.SubA2)
// s2.subMethod2()
}
//부모클래스는 open 키워드를 붙혀줘야 한다
open class SuperClass1{
var superA1 = 100
fun superMethod1(){
println("SuperClass1의 superMethod1")
//부모쪽에서는 자식것에 접근할 수 없다.
//println("subA2 : $subA2")
//subMethod2()
}
}
//class 클래스이름 : 부모클래스이름()
class SubClass1 : SuperClass1(){
var subA2 = 200
fun subMethod2(){
println("SubClass1의 subMethod2")
// 자식클래스의 메서드에는 부모의 요소를 사용할 수 있다.
println("superA1 : $superA1")
superMethod1()
}
}
상속과 생성자와의 관계
▶ 자식클래스는 부모 클래스의 생성자를 반드시 호출해야 한다.
1.▷ 부모클래스의 생성자를 명시적으로 호출하지 않으면 부모클래스가 가지고 있는 생성자 중 매개변수가 없는 생성자를 자동으로 호출한다.
2.▷ 만약 부모가 가지고 있는 생성자 중 매개변수가 있는 다른 생성자를 호출하겠다면 명시적으로 호출해주면 된다
fun main(){
val s3 = SubClass2()
println("s3 : $s3")
println()
val s4 = SubClass2(100)
println("s4 : $s4")
println()
val s5 = SubClass3()
println("s5 : $s5")
println()
}
open class SuperClass2{
constructor(){
println("SuperClass2의 매개변수가 없는 생성자")
}
constructor(a1:Int){
println("SuperClass2의 매개변수가 있는 생성자")
}
}
// SuperClass2를 상속받은 클래스
class SubClass2 : SuperClass2{
constructor(){
//부모클래스의 생성자를 명시적으로 호출하지 않으면
//부모클래스가 가지고 있는 생성자 중 매개변수가 없는 생성자를
//자동으로 호출한다.
}
constructor(a1:Int) :super(100){
//만약 부모가 가지고 있는 생성자 중 매개변수가 있는 다른 생성자를 호출하겠다면
//명시적으로 호출해주면 된다
//super: 상속관계에서 부모를 지칭하는 키워드
}
}
//부모의 생성자 호출은 다음과 같이 작성해도 된다.
class SubClass3 : SuperClass2(100)
출력결과
학습정리
클래스를 설계 할 때 다른 클래스에 정의한 요소를 그대로 물려받는 것을 상속이라고 부른다.