투케이2K

78. (kotlin/코틀린) abstract 추상 클래스 생성 및 open 클래스 상속 , super 부모 호출 , override 메소드 재정의 실시 본문

Kotlin

78. (kotlin/코틀린) abstract 추상 클래스 생성 및 open 클래스 상속 , super 부모 호출 , override 메소드 재정의 실시

투케이2K 2022. 9. 27. 14:46

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Kotlin

 

[소스 코드]

    // TODO [테스트 메소드 정의 실시]
    fun testMain(){
        Log.i("---","---")
        Log.d("//===========//","================================================")
        Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 테스트 함수 동작 실시]")
        Log.d("//===========//","================================================")
        Log.i("---","---")


        /**
         * ------------------------------------
         * TODO [요약 설명]
         * ------------------------------------
         * 1. 추상클래스란 하나 이상의 추상 메소드를 포함하는 클래스를 가리켜 추상 클래스(abstract class)라고 합니다
         * ------------------------------------
         * 2. 추상클래스 특징으로는 사용하는 메소드 명(헤더)을 정의해놓고, 메소드 몸체(바디) 내용은 구현하지 않는 클래스입니다
         * ------------------------------------
         * 3. 추상클래스, 인터페이스를 사용하면 상속을 받아서 다형성을 표시할 수 있고 다양하게 클래스를 확장시켜 사용할 수 있습니다
         * ------------------------------------
         * 4. 추상클래스 사용 시 해당 클래스에 포함되는 메소드 또한 abstract 키워드를 붙여야 합니다
         * ------------------------------------
         * */


        // [로직 처리 실시]
        try{

            // ------------------------------------

            // TODO [외부인 클래스 객체 생성 실시]
            val out = Out()


            // TODO [funcTest 메소드 호출 실시]
            out.funcTest()

            // ------------------------------------
        }
        catch(e : Exception){
            Log.i("---","---")
            Log.e("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > testMain() 메소드 : 에러 상황 발생]")
            Log.i("","\n"+"[error : "+e.message+"]")
            Log.e("//===========//","================================================")
            Log.i("---","---")
        }
    }



    // TODO [abstract 부모 추상 클래스 선언 실시]
    abstract class Parent {
        abstract fun funcTest() // [헤더 정의]
    }




    // TODO [추상클래스를 상속 받는 일반 자식 클래스 선언 실시]
    open class Child : Parent() {

        // [부모 메소드 재정의 및 몸체 구현 실시]
        override fun funcTest() {
            Log.i("---","---")
            Log.w("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > Child : funcTest 수행]")
            Log.w("//===========//","================================================")
            Log.i("---","---")
        }
    }



    // TODO [일반 자식 클래스를 상속 받는 외부 클래스 선언 실시]
    class Out : Child() {

        // [부모 메소드 재정의 및 몸체 구현 실시]
        override fun funcTest() {
            super.funcTest() // [자식 클래스 메소드 호출]
            Log.i("---","---")
            Log.w("//===========//","================================================")
            Log.i("","\n"+"[Test_Kotlin > Out : funcTest 수행]")
            Log.w("//===========//","================================================")
            Log.i("---","---")
        }
    }
 

[결과 출력]

 

 

반응형
Comments