1. 상속
기존의 코드에 기능을 조금만 수정하여 새로운 기능의 단위를 만들어 내는 작업
상속 문법 :
1. 상속가능 키워드 open이 부모 클래스에서 선언되어야 함.
2. class 자식클래스(속성들) : 부모클래스(속성들) {바디}
fun main() {
var a = Animal("나비", 3, "고양이")
var b = Dog("흰둥이", 2)
a.whoAmI()
b.whoAmI()
}
open class Animal(var name : String, var age : Int, var type : String){
fun whoAmI() { println("$name / $age / $type")}
}
class Dog (name : String, age : Int) : Animal(name, age, "개") {
fun bark() { println("멍멍") }
}
나비 / 3 / 고양이
흰둥이 / 2 / 개
2. Override 덮어쓰기(처럼보이기)
같은 이름의 함수를 선언함으로써, 기존의 함수를 대체하는 효과를 줌
※ 후대의 객체는 항상 선대의 객체보다 더 많은 기능을 하게 되다는 점 명심
문법
1. 덮어쓸 함수를 부모객체에서 open으로 추가
2. 재정의 할 함수에 override를 추가
fun main() {
var a = Animal("나비", 3, "고양이")
var b = Dog("흰둥이", 2, "강아지")
a.whoAmI()
b.whoAmI()
b.whoAmI2()
}
open class Animal(var name : String, var age : Int, var type : String){
// open 키워드가 추가되었다.
open fun whoAmI() { println("$name / $age / $type")}
}
class Dog (name : String, age : Int, type : String) : Animal(name, age, type) {
fun bark() { println("멍멍") }
// override
override fun whoAmI() {
println("$name / $age / \"멍멍\"")
}
fun whoAmI2(){ super.whoAmI() }
}
나비 / 3 / 고양이
흰둥이 / 2 / "멍멍"
흰둥이 / 2 / 강아지
3. 추상화
추상화의 목적은 코드를 구조화하기 위해서 멤버함수를 "선언만" 해둔 상태에서,
이후에 작성될(상속받은) 객체에서 필수적으로 해당 함수를 포함하게끔 하는 기법
당연히 상속받은 객체는 해당함수를 갖으므로 다형성을 만족하게 됨
문법 :
1. 부모 클래스에 abstract 키워드 추가, 추상화할 함수에 abstract 추가
2. 자식
fun main() {
var a = Dog("흰둥이", 2, "강아지")
a.whoAmI()
}
abstract class Animal(var name : String, var age : Int, var type : String){
// abstract 함수는 body가 없다.
abstract fun whoAmI()
}
class Dog (name : String, age : Int, type : String) : Animal(name, age, type) {
// 추상화 대상은 반드시 override되어야 한다.
override fun whoAmI() {
println("$name / $age / $type")
}
}
흰둥이 / 2 / 강아지
4. 인터페이스
인터페이스는 속성(변수)를 갖을 수 없는 클래스
기본적으로 추상화 함수를 포함하며, abstract가 생략된 형태
문법 :
interface 인터페이스명 {바디}
fun main() {
var a = Animal("흰둥이", 2, "강아지")
a.whoAmI()
a.run()
a.eat()
}
interface Runable {
fun run()
}
interface Eatable {
fun eat() { println("함냐함냐") }
}
class Animal(var name : String, var age : Int, var type : String)
: Runable, Eatable
{
fun whoAmI() { println("$name / $age / $type") }
override fun run() { println("다다다다") }
}
흰둥이 / 2 / 강아지
다다다다
함냐함냐
다형성의 예시
fun main() {
var a = Dog("흰둥이")
var b = Cat("나비")
var r : Runable = a
r.run()
r = b
r.run()
}
interface Runable {
fun run()
}
class Dog(var name : String) : Runable
{
override fun run() { println("${name}가 다다다다") }
}
class Cat(var name : String) : Runable
{
override fun run() { println("${name}가 도도도도") }
}
흰둥이가 다다다다
나비가 도도도도
'코틀린' 카테고리의 다른 글
[Youtube DiMo] 14-15강. 고차함수(함수포인터)와 람다함수/스코프함수 (0) | 2022.04.29 |
---|---|
[Youtube DiMo] 12-13강. Scope, 접근제어자 (0) | 2022.04.29 |
[Youtube DiMo] 8-9강. 클래스 (0) | 2022.04.29 |
[Youtube DiMo] 7강. 흐름제어와 논리연산자 (0) | 2022.04.29 |
[Youtube DiMo] 6강. 반복문과 증감연산자 (0) | 2022.04.28 |
댓글