[코틀린 문법] 오버라이딩, 추상 클래스, 인터페이스
Overriding(오버라이딩)
// Overriding(오버라이딩) //
// 기본적으로 서브 클래스에서는 수퍼 클래스와 동일한 함수를 만들 수 없으나
// -> 오버라이딩 -> 부모클래스의 메소드를 자식클래스에서 재정의 및 사용 가능
// 이미 구현이 끝난 함수를 서브 클래스에서 변경해야 할 때 사용
fun main() {
var t = Tiger()
t.eat()
// 오버라이딩 전
// 음식을 먹습니다
// 오버라이딩 후
// 고기를 먹습니다
}
// 수퍼 클래스 내 함수 앞에 open 붙이고
open class Animal2 {
open fun eat() {
println("음식을 먹습니다")
}
}
class Tiger : Animal2() {
// 서브 클래스 내 함수 앞에 override 붙이면 됨
override fun eat() {
println("고기를 먹습니다")
}
}
Abstract Class(추상 클래스)
// Abstract(추상화) //
// 형식만 선언하고 실제 구현은 서브 클래스에 일임할 때 사용하는 기능
fun main() {
var r = Carot()
r.lead()
r.response()
// 바니바니 바니바니
// 당근 당근
}
// Abstraction Class(추상 클래스) //
// 추상 함수를 포함하는 클래스
abstract class Game {
// Abstraction Function(추상 함수) //
// 선언부만 있고 기능이 구현되지 않은 함수
abstract fun response()
// 일반 함수(기능이 있음)
fun lead() {
println("바니바니 바니바니")
}
}
// 추상 클래스는 일부 함수가 구현되지 않은 미완성 클래스
// -> 단독으로 인스턴스 만들기 불가능
// -> 서브 클래스에서 상속을 받아 추상 함수를 구현해야 함
// Animal 상속 받음
class Carot : Game() {
// response 함수가 실제 동작되는 구현부
override fun response() {
println("당근 당근")
}
}
Interface(인터페이스)
// Interface(인터페이스) //
// 서로 다른 기능들을 여러개 물려줘야 할 때 유용한 기능
// 추상함수 또는 일반함수를 가질 수 있음
// 생성자 가질 수 없음
// (추상함수는 생성자 가질 수 있다는 게 차이점)
fun main() {
var d = Dogs()
d.run()
d.eat()
}
// 구현부 없는 함수
// -> 자동으로 abstract 함수로 인식
// (abstract 생략해도 됨)
interface Runner {
fun run()
}
// 구현부 있는 함수
// -> 자동으로 open 함수로 인식
// (open 생략해도 됨)
interface Eater {
fun eat() {
println("음식을 먹습니다")
}
}
// 서브 클래스 하나가 한 번에 여러 인터페이스를 상속 받을 수 있음
class Dogs : Runner, Eater {
override fun run() {
println("WADADA WADADA 달려")
}
override fun eat() {
println("like hubba-hubba")
}
}
참고
반응형
'개발(Android) > kotlin syntax' 카테고리의 다른 글
[Kotlin syntax] Higher-Order Functions, Lambda Functions, Unit (0) | 2022.04.05 |
---|---|
[Kotlin syntax] Scope, Access Modifier(Public/Internal/Private/Protected) (0) | 2022.04.05 |
[Kotlin syntax] Class (0) | 2022.04.04 |
[Kotlin syntax] Break, Continue, Logical Operators (0) | 2022.04.04 |
[Kotlin syntax] While, Do While, For, Increment Operators, Decrement Operators (0) | 2022.04.03 |