예제) 추상 클래스 사용하기(1)

 

 

 

 

 

using System;

abstract class Car

{

public virtual void Run() {} 

}

 

abstract class SportsCar : Car

{

  public virtual void FastRun() {}

}

 

class Boxter : SportsCar{

  public override void Run(){

  Console.WriteLine(“100km/h");

  }

}

 

 

 

추상 클래스의 특징

 

 

 

- 일반 클래스와의 차이점
+ 추상 클래스는 상속의 최상위에 존재한다. , 추상 클래스가 일반 클래스를 상속받을 수 없다.
+ 추상클래스가 추상클래스를 상속받을 수 있다.
+ 인터페이스를 이용하여 다중상속을 구현할 수 있다.

 

 

 

 

 

 

 

 

 

추상 클래스(Abstract Class)

 

 

 

 

Ø 추상 클래스의 개념
l 추상 메소드란 구현 부분이 전혀 없는 메소드를 의미한다.
l 추상 클래스는 추상 메소드가 아닌 일반 메소드를 가질 수 있다. 반면 추상 클래스가 아니면 추상 메소드를 가질 수 없다.
l 추상 클래스는 직접 객체를 생성할 수 없으며, 이 클래스를 상속받은 서브 클래스에서 슈퍼 클래스

    (이 경우는 추상 클래스임)의 모든 추상메소드를 구현한 후에 객체를 생성할 수 있다.

 

 

 

 

 

최종 클래스(Sealed Class)

 

 

 

Ø 클래스의 정의 앞에 다음과 같이 sealed를 붙이면 그 클래스는 상속될 수 없다.

      sealed class Circle  {  //……   }

Ø 왜 사용되는가?
l 프로그램상의 이유 -> 오류를 줄이기 위해서
l 때로는 상속을 할 경우 정상적인 클래스가 될 수 없을 수도 있다. (private등을 쓰는 경우)
l 성능상의 이유 -> 상속이 금지된 클래스는 보통 클래스에 비해 메모리 소비가 적고, 빠르다. (상속을 위한 별도 공간이 필요함)
l Console이나 String등의 System 클래스 들도 최종클래스로 정의되어있다.

 

 

 

 

 

 

 

new 키워드

 

 

 

명시적 오버라이딩 방법

 

- 앞에서 말한 가상 메소드 방법보다 편리한 방법으로 new 키워드를 사용하는 방법이 있다

   아래의 예는 앞 페이지의 예와 같은 역할을 한다.

- 상속관계에서 메소드가 충돌하는 것을 방지하기 위한 지시자의 역할을 한다.
- 가상/일반 메소드에 상관없이 사용된다.

 

  class Car{

  public void Run() {}

  }

  class SportsCar : Car{

  new public void Run() {}

  }

 

 

 

 

가상 메소드(Virtual Method)

 

 

 

 

 

Ø 가상 메소드
l 앞에서 말한 overriding은 묵시적으로 일어나는 것임
l 명시적으로 슈퍼클래스의 메소드를 가상 메소드로, 서브클래스의 메소드를 오버라이드 메소드로 정의할 수 있다.
l virtual-override 쌍을 이용

 

 

 

 

  class Car{

  public virtual void Run() {}

  }

 

  class SportsCar : Car{

  public override void Run() {}

  }

 

 

 

 

앞의 예에 대한 해설

 

 

 

 

Ø 클래스 SportsCarCar(슈퍼 클래스) 양쪽에 메소드Run()”이 정의되어 있으므로,

    이 메소드는 오버라이딩된 메소드이다.

 

Ø SportsCar형의 객체 boxter로서 Run()를 호출하면, 오버라이딩메소드가 실행된다.

 

Ø 한편, boxter.Run(250)은 매개변수가 있기 때문에 int형 매개변수를 하나가진 메소드인

       Run(int i)가 실행되었다. 이 메소드는 오버로딩된 메소드이다.

 

 

 

 

 

예) Overriding과 Overloading(2)

 

 

 

 

 

class Program

{

  public static void Main()

  {

  SportsCar boxter = new SportsCar();

  boxter.Run();  //결과:  Overriding : 200km/h

  boxter.Run(250);  //결과:  Overloading : 250km/h

  }

}

 

 

 

 

 

+ Recent posts