출처 : http://goguri.tistory.com/entry/TIP-timeNULL%EA%B3%BC-%EC%8B%9C%EC%8A%A4%ED%85%9C-%EC%8B%9C%EA%B0%84%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC

Posted by 부우산사나이
:

# 일자: 2009-12-05 일곱째날

# 강좌: C# Programing

# 주제: 상속 기법(Overload, Override, Interface)

 

<Lecture>

1. OOP 구조

   객체1 - 객체2 - 객체3

   ☞ 각 객체는 구별, 존재, 고유역할 

 

2. OOP 작성순서

   0) 클래스(분류,구분) 작성

   1) 객체 형성

   2) 객체간 상호작용 시킴

 

3. OOP을 위한 선수학습

   1) 클래스 작성법

       (1) 기본적

       (2) 테크닉

            . 상속: overloading, overriding, interface

   2) 객체 생성법

   3) 객체간의 상호작용 시키는 방법

 

4. Over Load ()

   1) 의미

      - 과적, 많이 실려 있음, 같은 것이 많음

      - 메소드 관련

   2) 대상

      - 상속메소드

      - 단일 Class 내에서

   3) 단일 Class 내에 F라는 이름의 메소드 들이 Overload 됨

      - 메소드 관련(메소드 명이 같고 인자의 갯수와 배치가 다름)

      - Class A

        {

           public void F() {}

           public void F(int a) {}

           public void F(int a, string b) {}

         }

  

   4) 상속에서 F라는 이름의 메소드 들이 Overload 된 경우

      - Class 부모

        {

           public void F() {}

         }

      - Class 자식:부모

        {

           public void F(int a) {}

         }

   5) 생성자에 나타만 Overload

      - Class A

        {

           public A() {}

           public A(int a) {}

           public A(string a) {}

         }

      - MSDN reference

      

 

5. Override

   1) 의미

      - 교체, 대신

   2) 대상

      - 상속(반드시 상속에서만 발생됨)

   3) 기법

      (1) virtual

      (2) abstract

   4) virtual   ☞ 부모의 행동을 자식이 바꾸는거

      (1) 불완전하여 ambigous한 틀린 예

         

     

     ☞ 컴파일러를 헷깔리게 하죠. 부모랑 자식이랑 똑같으니까. 컴파일러에따라 에러를 주는 경

         우도 있고 에러 안주고 그냥 자식 불러야 할때 부모를 부르는 경우도 있어요. (csc.exe경우)

 

      (2) virtual을 사용한 올바른 예

       

    

    ☞ 컴파일러를 헷깔리지 않게 아주 잘해주었죠. virtual 과override 키워드의 힘

        특히 virtual에대한 override 를 써서 재정의 할지 말지는 선택적

 

      (3) 실행 코드

       

      

      (4) 실행 결과

          - 불완전하여 ambigous한 틀린 예

           

         -  virtual을 사용한 올바른 예

           

         ☞ 세번째 결과는 참조는 부모로 선언되었으나 실제 객체는 자식이다.

             부모가 아무리 자식을 가르키고 있다해도 자식객체니까 자식이 호출되죠!

             (부모가 아무리 정약결혼을 시켜도 결국 자식은 사랑하는 사람과 결혼하쟎아요♡)     

 

   5) abstract ☞ 부모가 어떤 행동을 할지 구체적으론 몰라서 실제 행동은 자식이 꼭 해야하는거

      (1) 의미

           ① abstract 메소드

                - abstract 키워드로 body가 없는 메소드

           ② abstract 클래스

               - 클래스 내부에 abstract 메소드를 1개 이상 소유한 클래스

               - 부모가 abstract 메소드여서 추가로 abstract메소드 없이 부모의 abstract 메소드의 body

                  를 구현 안한 클래스

      (2) 예제

           ① 추상화 클래스 선언 

             

           ② 추상화 클래스를 선언받은 일반 클래스 선언

              

           ③ 추상화 클래스를 선언받은 추상화 클래스 선언

              

           ④ 추상화 클래스를 선언받은 추상화 클래스를 선언받은 일반 클래스 선언

             

           ⑤ 추상클래스의 객체생성 과 추상메소드의 호출 

        

 

          * 예제1번의 오류화면

          

 

           ⑥ 실행결과

                   

 

   6) Interface ☞ 부모가 어떤 행동을 할지 몽땅 구체적으론 몰르는 것만 있는 경우

      (1) 의미

           ① interface

                - class에 모두 abstract 메소드만 오는 경우 class가 아닌 interface로 대체하고

                  abstract 메소드를 interface 메소드로 간단히 표시함

           ② interface 메소드

               - public이라고 안써도 무조건 public임

               - abstract를 안씀

               - body가 없음

      (2) 예제

           abstract class로 Unit class를 작성, interface로 Unit interface를 작성한 예제를 비교함

           결국 Unit를 사용하는 방법을 동일함

           ① Unit 선언 using interface

              

 

           ② Unit을 상속받는 마린 class 선언

              

 

           ③ Unit을 상속받는 시즈탱크 class 선언

             

 

           ④ Unit을 사용 using Unit 배열로 마린과 시즈탱크를 객체로 생성하여 한번에 동작시킴

          

         * 주의: 위의 Unit[]의 new는 객체 생성이 아니고 배열이니까 abstract class였어도 문제없음

       - MSDN reference

 

 

6. 다중상속

   1) 디자인

    

   2) 정의

       - 두개 이상의 class, abstract class, interface를 상속 받는 것

   3) 조건

       - Parent들은 class 나 abstract class가 최대 한개여야 함

   4) 주의사항

       - 완전과 불완전의 관계

        

       - 완전과 불완전 경우에 따른 결과

      

         

<Question>

1. 오버라이딩과 오버라이드의 차이점이 있남?

 

Posted by 부우산사나이
:

http://blog.naver.com/0bloodwind0/20127908176

여기에 설명 잘되어 있음!!!

Posted by 부우산사나이
: