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 |
댓글