[안드로이드 공부]/코틀린

추상클래스(abstract)와 인터페이스(interface)

코코모아 2020. 7. 27. 16:31

아래는 코모스튜디오가 직접 만든 무료 앱이에요
(한 번만 봐주세요 ^^)

01

02

03

정각알림 만들기(말하는시계)

말하는 시계 (취침, 자전거) 

말하는 타이머 음성 스톱워치 

차이점

추상 클래스는 상속과 필수구현을 위해

인터페이스는 필수구현을 위해

추상 클래스

  • 클래스 내에 추상 메서드가 하나 이상 포함 되거나, 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)
   //달구지
}
모든 게시물은 코모스튜디오의 소유이며, 무단 복제 수정은 절대 불가입니다.
퍼가실 경우 댓글과 블로그 주소를 남기고 해당 게시물에 출처를 명확히 밝히세요.