본문 바로가기

Writer/WarmingUp Code

워밍업 코드 클래스 2

반응형
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