본문 바로가기

C#(ASP.NET)

C#_메소드 오버라이딩(abstract)


<메소드 오버라이딩2 - abstract(추상화)>

Abstract 제한자는 클래스, 메소드 및 프로퍼티에 대해

사용할 수 있다. 메소드가 abstract로 선언되었다면 해당

클래스에서는 이 메소드를 구현하지 않고 해당 클래스의

파생 클래스가 이 메소드를 구현해야 한다. abstract 메소드는

머리만 있고 몸통이 없는 메소드 이기 때문에

해당 클래스에서는 사용할 수 없다. 클래스 선언에

abstract 제한자를 사용하면 해당 클래스가 다른 클래스의

기본 클래스만 사용됨을 나타낸다.

abstract 메소드는 abstract 클래스 안에서만 선언할 수 있고

abstract 클래스는 자기 스스로 객체를 생성하지 못한다.

자신에게서 상속을 받은 클래스만이 객체를 생성할 수 있다.

또한 abstract 메소드는 상속 받은 클래스에서 반드시 구현해야 한다.

abstract 메소드를 파생클래스에서 오버라이드 할 때는 메소드

이름 앞에 override 키워드를 써줘야 한다.

ex)

abstract class Test

{

public abstract void Func();

}

class Test2 : Test

{

public override void Func()

{

//이런 저런 코드들....

}

----------------------------------

/* 2/24 객체지향적 프로그래밍(상속: abstract(추상화))*/
 
using System;

abstract class Com //abstract 을 쓰면 반드시 한번은 써야함.
{
 public void Graph()
 {
  Console.WriteLine("그래픽 OK");
 }
 
 public abstract void Network(); // abstract 을 쓰면 반드시 한번은 써야함
}

class NCom : Com
{
 public override void Network() /*override는 아버지클래스의 Network()함수의 틀은

                                               그대로 쓰면서 안의 내용은 제정의 한다는 뜻*/
 {
  Console.WriteLine("네트워크 OK");
 }
}

class Override
{
 public static void Main()
 {
  // Com c = new Com(); <== abstract은 머리만 있고 몸체가 없기때문에

                                            객체(인스턴스)생성이 불가능
  Com c = new NCom(); // 그래서 상속받은 아들 클래스로 객체를 같이 생성함.
  c.Graph();
  c.Network();
 }
 
}

[출처] 곰탱이의 블로그