1.  프로퍼티와 메서드의 재정의 : 오버라이드

👩🏻‍💻  상속받은 부모 클래스의 프로퍼티와 메서드 중에 자식 클래스에서는 다른 용도로 사용해야 하는 경우가 있음
👩🏻‍💻  동일한 이름의 메서드나 프로퍼티를 사용할 필요가 있을 경우에 override 키워드를 사용해서 재정의 할 수 있음
👩🏻‍💻  오버라이드 할 때는 프로퍼티나 메서드도 클래스 처럼 앞에 open을 붙여서 상속할 준비가 되어 있어야 함

 

메서드 오버라이드


    📍 상속할 메서드 앞에 open 키워드를 붙이면 오버라이드 할 수 있지만, open 키워드가 없는 메서드는 오버라이드 할 수 없음

    open class BaseClass {
        open fun opened() {

        }
        fun notOpened() {

        }
    }

    class ChildClass : BaseClass() {
        override fun opened() {
            super.opened()
        }
    }

 

 

프로퍼티 오버라이드


    📍 메서드 오버라이드처럼 프로퍼티 역시 open으로 열려 있어야만 오버라이드를 할 수 있음

    open class BaseClass2 {
        open var opened: String = "I am"
    }
    class ChildClass2: BaseClass2() {
        override var opened: String = "You are"
    }

 


2.  추상 클래스

🚀  추상 클래스는 그 자체로는 객체를 만들 수 없는 클래스로, 일반적으로 추상 메소드가 포함된 클래스를 말함
        ➡️  추상 메소드란 아직 구현되지 않고 추상적으로만 존재하는 메소드
🚀  추상 클래스와 추상 메소드 앞에는 abstract 키워드를 붙임
🚀  상속받는 자식 클래스에 특정 메소드 구현을 강제하고 싶을 때 사용
🚀  추상 클래스 자체로는 직접 객체를 만들 수 없고 자식 클래스에서 추상 메소드를 구현한 다음, 자식 클래스의 객체를 생성하면 됨.

abstract class Game {

    fun startGame() {
        println("게임을 시작했습니다.")
    }
    // 추상 메소드
    abstract fun printName()
}

class OverWatch: Game() {
    override fun printName() { // 추상 메소드 구현
        println("오버워치입니다.")
    }
}

fun main() {
    val overWatch = OverWatch()
    overWatch.startGame() // 게임을 시작했습니다.
    overWatch.printName() // 오버워치입니다.
}

 

 

 

[ 내용 참고 : IT 학원 강의 ]

+ Recent posts