아래는 코모스튜디오가 직접 만든 무료 앱이에요(한 번만 봐주세요 ^^)
차이점
추상 클래스는 상속과 필수구현을 위해
인터페이스는 필수구현을 위해
추상 클래스
-
클래스 내에 추상 메서드가 하나 이상 포함 되거나, abstract 로 정의 된 경우
-
추상 메서드가 하나라도 있으면 class 앞에 abstract 를 붙여야 함
- 추상 메서드는 구현 되지 않으며 상속받은 클래스에서만 구현되어야 한다.
-
abstract 에는 final 을 붙일 수 없다.
- 이미 open 이다
-
생성자, 전역 변수도 선언 할 수 있고, 메서드 내용이 있을 수도 있다.
-
다중 상속 안됨
-
추상 클래스는 직접 생성될 수 없으며, 다른 클래스를 통해 생성되어야 한다. 직접 Car() 로 생성하면 아래와 같은 에러가 나타난다.
-
Cannot create an instance of an abstract class
-
abstract class Car {
abstract fun overSpeed()
}
abstract class Car {
fun overSpeed()
}
자동차 클래스에는 색상이란 추상 메서드가 있다.
자동차 클래스를 상속 받은 달구지가 있는데 추상 메서드가 있으니 반드시 Override로 재 구현을 해야 한다.
(단, 상속받은 달구지 클래스가 추상 클래스라면 추상 매서드를 구현 하지 않아도 된다.)
fun main(){
Dalguzi("Yellow").color()
}
abstract class Car {
var speed : Int = 0
//빈 껍데기 메서드, 상속받는 클래스에서 반드시 구현 해야 함
abstract fun color()
fun brake() {
speed -= 10
}
}
class Dalguzi(_color: String) : Car() {
val color = _color
override fun color(){
println("Color is: ${color}")
}
}
인터페이스
-
반드시 구현 해야 할 껍데기 메서드를 나열해 놓은 클래스
-
implement 하는 클래스는 반드시 모든 메서드를 구현 해야 함
-
인터페이스 안의 모든 메서드는 추상 메서드, abstract 생략 가능
-
final 을 붙일 수 없다.
-
생성자, 전역 변수, 메서드 내용 모두 만들 수 없다.
-
다중 상속 가능
-
이미 open 이다
interface Car {
val name: String
}
//아래 3개의 클래스 모두 동일함
class Sky(val _name: String) : Car {
override val name : String
get() = _name
}
//주 생성자에서 만든 프로퍼티에 바로 구현
class Sky constructor(override val name: String) : Car
class Sky(override val name: String) : Car
fun main(){
println(Sky("달구지").name)
//달구지
}
' [안드로이드 공부] > 코틀린' 카테고리의 다른 글
null cannot be cast to non-null type androidx.appcompat.widget.appcompatimagebutton (0) | 2020.08.22 |
---|---|
smart cast to is impossible because is a mutable property that could have been changed by this time (0) | 2020.08.07 |
[MVVM] LiveData와 ViewModel Observer로 연결 (0) | 2020.08.07 |
코틀린 생성자와 위임 (0) | 2020.07.27 |
코틀린 Scope; apply, also, run, with, let (0) | 2020.07.23 |
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다. |
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요. |