예제) 추상 클래스 사용하기(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");

  }

}

 

 

 

추상 클래스의 특징

 

 

 

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

 

 

 

 

 

 

 

 

 

 



『 명령 대상 』

​명령 대상은 명령이 실행될 객체로 명령 소스에서 그 대상을 명시적으로

설정할 수 있으며 대상이 정의 되지 않은 경우에는 키보드의 포커스가

위치한 요소가 명령 대상이 됩니다 위의 예제를 생각해 본다면 명령

대상은 당연히 TextBox 가 되겠지요..! 하지만 저는 명령 소스에서 명령

대상을 따로 설정하지 않았으므로 키보드의 포커스가 TextBox에 올라

갔을때 명령 대상이 TexBox가 되는 것이지요

이렇게 명시적으로 명령 대상을 설정하지 않았을 경우에는 개발자가

명령 대상을 따로 관리하지 않고 같은 명령 소스를 사용하여 포커를 

옮겨 다니며 여러 대상에게 명령을 호출 시킬수 있는 장점이있습니다

 

 

 

추상 클래스(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() {}

  }

 

 

 

 

+ Recent posts