본문 바로가기
Kotlin

[코틀린] 상속

by Sky Titan 2020. 9. 18.
728x90

상속

  •  기본적으로 코틀린의 모든 클래스는 Any 클래스의 하위 클래스가 되며, 상위 클래스를 따로 명시하지 않으면 Any클래스를 상속받게 됨.
  • 코틀린에서는 상속 가능한 클래스(상위 클래스)를 선언할 때 open이라는 키워드를 사용한다.
  • 자바에서는 final 키워드를 사용하지 않는 이상 기본적으로 모두 상속 가능한 클래스이다.

open class Person { //묵시적으로 Any로부터 상속된다.
 
}

class Student : Person() { //기반 클래스로부터 상속됨, 다른 클래스로 상속 불가

}

 

다형성

  • 메소드들이 같은 이름을 사용하지만 매개변수가 다르거나 구현 내용이 달라서 다양한 기능을 수행할 수 있게 하는 것

 

1. 오버로딩 (Overloading)

- 동일 클래스의 같은 이름의 메소드를 매개변수의 수나 종류를 다르게 해서 여러 번 정의하는 개념

- return 값도 달라질 수 있음

fun add(x : Int, y : Int) = x + y;

fun add(x : Double, y : Double) = x + y;

 

2. 오버라이딩 (Overriding)

  • 상위 클래스의 메소드를 하위 클래스에서 상속받아서 '재정의' 한 후 사용하는 것
  • 메소드 이름, 매개변수, 리턴값은 같음!
  • 메소드 선언 시 open 키워드를 붙여야 하위클래스에서 오버라이딩 가능
  • 코틀린에서는 프로퍼티도 오버라이딩 가능!
  • 메소드 앞에 final 키워드를 붙이면 오버라이딩한 메소드를 하위 클래스에서 재정의 불가능
open class Person {
 
 //오버라이딩 가능
 open fun walk (distance : Double)
 {
 }

 //오버라이딩 불가능 (최종메소드)
 fun run (distance : Double)
 {
 }

}

class Student : Person()
{
 //오버라이딩한 메소드, 하위 클래스에서 재정의 막음
 final override walk(distance : Double)
 {
 //재정의
 }
}

 

super, this 키워드

  • super : 상위 클래스의 객체 참조 (프로퍼티, 메소드, 생성자)
  • this : 현재 클래스의 객체 참조
open class Person {
 
 constructor (name : String) {
  println("It's Person $name");
 }

}

class Student : Person() {

 constructor (name : String) : this(name, 10) {
  println("It's Student $name");
 }
 
 constructor (name : String, age : Int) : super(name)
 {
  println("It's Student $name and his age is $age");
 }

}

fun main()
{
 var = Student("James")
}

/* 실행결과:
It's Person James //상위 클래스 생성자
It's Student James and his age is 10 //현재 클래스 부 생성자
It's Student James //현재 클래스 주 생성자
*/

참조 순서

: 상위클래스 생성자 -> 현재클래스 부 생성자 -> 현재클래스 주 생성자

728x90

'Kotlin' 카테고리의 다른 글

[코틀린] 인터페이스 (Interface)  (0) 2020.09.18
[코틀린] inner 클래스  (0) 2020.09.18
[코틀린] break와 continue에 라벨 사용  (0) 2020.09.18
[코틀린] 함수 종류들  (0) 2020.09.18
[코틀린] 콜백 함수  (0) 2020.09.18

댓글