ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 워밍업 코드 클래스 2
    Writer/WarmingUp Code 2008. 12. 23. 21:18
    반응형
    using System;

    namespace classInterface
    {
    // 추상클래스 (선언 최상위 부모클래스)

    abstract class A
    {
    //맴버 변수
    public string name = "전광식";

    //맴버메소드 (추상클래스는 메소드를 구현할 수 있다)
    public void Foo()
    {
    Console.WriteLine("A class Foo Method");
    }

    // 추상메소드 (구현이 없음)
    public abstract void Goo();
    }

    // 자식 클래스 선언 (A클래스를 상속 받음)
    class B : A
    {
    //맴버변수
    public int age = 31;

    //부모의 추상 메소드를 Override하여 재구현
    public override void Goo()
    {
    Console.WriteLine("B class Goo Method");
    }

    //가성메소드
    public virtual void Hoo()
    {
    Console.WriteLine("B class Hoo Method");
    }

    }


    interface IKorean
    {
    //맴버함수 인스페이스는 메소드를 구현할 수 없다.
    void speak();
    void Greeting();
    }

    interface IEnglish
    {
    void speak();
    }


    //최종클래스 선언 (다중상속을 받고 있다)

    sealed class C : B, IKorean, IEnglish
    {
    // 부모로 부터 상속 받은 일반 메소드를 
    // new 키워드를 통해 재구현
    new public void Foo()
    {
    Console.WriteLine("C class Foo Method");
    }

    //부모의 가상 메소드를 Override 하여 재구현
    public override void Hoo()
    {
    Console.WriteLine("C class Hoo Method");
    }

    //인터페이스로부터 상복받은 메소드를 구현
    //다중상속으로 구현할 메소드가 동일 이름으로 두개
    //이상일 경우 인터페이스를 표시해 준다
    void IKorean.speak()
    {
    Console.WriteLine("한국어");
    }

    //인터페이스로부터 상속 받은 메소드를 구현
    void IEnglish.speak()
    {
    Console.WriteLine("English");
    }

    //인터페이스로부터 상속 받은 메소드를 구현
    public void Greeting()
    {
    Console.WriteLine("안녕하세요");
    }

    class MainProgram
    {
    static void Main()
    {
    //A클래스의 객체를 C클래스의 인스턴스로 
    //생성하여 대입한다. C클래스가 A클래스의
    //자식클래스로 아래와 같이 구현할 수 있다
    A a = new C();

    Console.WriteLine(a.name);
    a.Foo();

    // 추상 메소드 Goo 실행한다
    // 자식 클래스에서 Override된 메소드가 실행된다
    a.Goo();
    Console.WriteLine();

    // B b = (B)a;
    // aa연산자는 a인스턴스가 B클래스로 현변환 할 수
    // 있는지 확인하여 변환 할 수 없으면 null을 반환하고
    // 변환 가능하면 B클래스의 인스턴스를 반환하다
    B b = a as B;

    b.name = "지성박";
    Console.WriteLine(b.name + "/" + b.age);

    //부모클래스에서 상속받은 Foo 메소드 실행

    b.Foo();

    //Override한 Goo 메소드 실행
    b.Goo();

    /*가상메소드는 Hoo를 실행한다 추상 메소드와
    * 동일하게 자식 클래스에서 Override된 메소드가 실행된다
    * 가상메소드는 선언 및 구현을 할수 있으며  추상메소드는
    * 선언만 할 수 있다. 가상 메소드는 자식클래스가Override
    * 하지않아도 선언시 구현된 구문이 실행된다 */

    b.Hoo();

    Console.WriteLine();

    /* C c = (C) b ; C c = b as C;동일표현
    * 삼항 연산자 표현으로 b인스턴스가 C클래스타입으로
    * 형변환 가능하면 변환하여 반환하고 그렇지 못하면 
    * null을 반환하는 표현이다 */

    C c = (b is C) ? (C)b : null;

    c.name = "박지성";
    c.age = 23;
    Console.WriteLine(c.name + "/" + c.age);
    // new 키워드를 통해 재구현한 Foo 메소드 실행
    c.Foo();
    //상속받은 Goo메소드 실행
    c.Goo();
    //Override한 Hoo 메소드 실행
    c.Hoo();
    Console.WriteLine();
    // c 인스턴스를 IKorean. Interface로 형반환한다
    IKorean K = (IKorean)c;
    K.speak();
    K.Greeting();
    // IEnglish인터페이스의 인스턴스를 C클래스의
    //d 인스턴스로 생성하여 대입시킨다
    IEnglish e = new C();
    e.speak();
    Console.WriteLine();


    }
    }


    }

    }
    반응형

    'Writer > WarmingUp Code' 카테고리의 다른 글

    워밍업 코드 클래스  (0) 2008.12.23
    C# ADO.NET 접속 Console접속 SELECT ,UPDATE  (0) 2008.11.12
    ADO.NET 접속  (0) 2008.10.29
    메모장 만들기(MDI)포함  (0) 2008.10.29
    C# Thread 스레드  (0) 2008.10.29
    C# 객체생성과제  (0) 2008.10.20
    C# 과제  (0) 2008.10.17
    abstract interface  (0) 2008.10.15

    댓글

Designed by Tistory.