추상 클래스(abstract)
: 추상 클래스는 일부 기능을 미리 구현(abstract 키워드 필요!)할 수 있으며, 나머지 기능은 추상 메소드로 남겨놓아 상속받는 클래스에서 구현하도록 요구할 수 있다.
: 완전한 구현과 추상적인 정의를 모두 가질 수 있다.
:상속을 통해 기능을 재사용하고, 공통된 동작을 하위 클래스에 제공할 때 유용
// 추상 클래스
abstract class Bar {
abstract fun foo() // 기능 구현 불가능! 하위 클래스에서 구현해야함
fun bar(){ // 일반 메서드
println("Bar!!!")
}
}
// 상속 받을 떄 () 필수 !!!!!!
class Foo : Bar() {
override fun foo() {
println("Foo!!!")
}
}
fun main() {
val bar: Foo = Foo()
bar.bar()
bar.foo()
}
인터페이스 (interface)
: 인터페이스는 기본적으로 구현을 제공하지 않는 추상 메소드들의 집합이다.
: 인터페이스 내에 선언된 메소드는 기능을 구현하지 않으며, 이를 구현하는 클래스가 반드시 기능을 정의해야 한다.
: 하지만 코틀린에서는 디폴트 메소드도 제공할 수 있습니다. 즉, 인터페이스에서도 일부 구현을 가질 수 있다.
// 인터페이스
interface Widget {
fun onClick() //구현 되지 않은 메서드
fun showMessage() = println("Hello user?!") //구현 된 디폴트 메서드
}
// 상속 받을 떄 괄호는 필요 없다!!!!!
class Button : Widget {
override fun onClick() {
println("Button clicked")
}
}
fun main() {
var btn = Button()
btn.onClick() //Button clicked
btn.showMessage() //Hello user?!
}
무명 클래스
:한번만 사용하고 시용하지 않을 클래스라면 아래와 같이 작성할 수 있다.
// 인터페이스
interface Widget {
fun onClick() //구현 되지 않은 메서드
fun showMessage() = println("Hello user?!") //구현 된 디폴트 메서드
}
fun main() {
var btn = object : Widget { //무명 클래스
override fun onClick() {
println("Button clicked")
}
}
btn.onClick() //Button clicked
btn.showMessage() //Hello user?!
}
인터페이스의 다중 상속
: 클래스 상속과는 다르게 다중 상속이 가능하다!
이렇게 아래와 같이 다중 상속을 하고 다중 상속한 부모에 있는 모든 메서드를 구현해야한다.
// 인터페이스
interface Widget {
fun onClick() //구현 되지 않은 메서드
fun showMessage(v: String) = println("UI widget = $v") //구현 된 디폴트 메서드
}
interface Focusable {
fun setFocus(b: Boolean)
fun showMessage(v: String) = println("$v is focusable")
}
class EditText: Widget, Focusable {
val name = "EditText"
override fun onClick() {
println("$name is clicked")
}
override fun setFocus(b: Boolean) {
println("$name ${if (b) "got" else "lost"} focus")
}
override fun showMessage(v: String) {
super<Widget>.showMessage(v)
super<Focusable>.showMessage(v)
}
}
fun main() {
var editText = EditText()
editText.showMessage(editText.name)
editText.onClick()
editText.setFocus(true)
}
//출력
//UI widget = EditText
//EditText is focusable
//EditText is clicked
//EditText got focus
'2학년 2학기 > 모바일 소프트웨어 - 코틀린' 카테고리의 다른 글
Kotiln - 함수 (0) | 2024.10.10 |
---|---|
Class(1) - 중첩 클래스와 내부 클래스 (0) | 2024.10.01 |
Class(1) - 상속 (0) | 2024.10.01 |
Class(1) - getter, setter (0) | 2024.10.01 |
Class(1) - 클래스 선언과 생성자 (0) | 2024.09.30 |