앞의 예에 대한 해설

 

 

 

 

Ø 추상 메소드는 아래와 같이 정의 되었다.

  public abstract void FastRun();

l abstract 지시자를 명시한다.
l ;으로 마무리해 준다. {}을 사용하면 구현된 것으로 판단 에러가 발생하다.

 

 

Ø Boxter 클래스가 추상클래스 SportsCar를 상속받았는데, 추상메소드들을 구현해 주지 않았기 에러가 발생한다.

 

 

 

 

예제) 추상 메소드

 

 

 

 

 

using System;

abstract class SportsCar

{

  public abstract void FastRun();

}

class Boxter : SportsCar{}

class Program

{

  public static void Main()

  {

  Boxter a=new Boxter();

  a.FastRun();

  }

}

 

 

 

 

 

앞의 예에 대한 해설

 

 

 

 

Ø 추상 클래스 SportsCar는 추상클래스 Car를 상속받을 수있다.
Ø Car b=new Car(); 처럼 추상클래스로 직접 객체를 생성하는 것은 에러가 된다.
Ø Boxter 클래스는 일반 클래스이지만, 슈퍼클래스 SportsCar에서 추상메소드를 정의하지 않았기 때문에 아무런 구현이 없어도 에러가 발생하지 않는다.
Ø 페이지의 예에서 추상 메소드와 일반 메소드의 차이를 볼 수 있다.

 

 

 

 

 

 

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

 

 

 

 

class Program

{

          public static void Main()

 {

  Boxter a=new Boxter();

  //Car b=new Car();  // 이건 에러!!

 

  a.Run();  // Boxter에서 구현하지 않았다.

  a.FastRun();

  }

}

 

 

 

 

 

예제) 추상 클래스 사용하기(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 클래스 들도 최종클래스로 정의되어있다.

 

 

 

 

 

 

 

+ Recent posts