C#에서 부모 클래스인 기준 클래스(Base Class)로부터 상속하여 새로운 파생 클래스(Derived Class)를 만들 수 있다.
상속 (inheritance)을 사용하게 되면 Base클래스의 데이터 및 메서드들을 (public 아니면 protected 멤버의 경우 ) 파생클래스를 사용할 수 있게 된다.
파생 클래스는 Base클래스로부터 물려받는 멤버들 외에 대개 자기 고유의 메서드와 데이터를 추가해서 사용하게 된다.
C#에서 파생클래스를 정의하기 위해선 클래스명 뒤에 Colon : 을 찍고 Base 클래스 명을 써주면 된다.
제약점은 C#에서는 파생클래스가 단 하나의 Base 클래스로부터 상속되어져야 한다는 것이다.
즉, 하나의 파생클래스는 2개 이상의 Base 클래스를 가질 수 없다. 🚫
예시로 Base클래스 (Animal)과 Dog Bird 파생클래스를 생성하는 코드를 작성해보겠다. 📝
public class Animal //Base 클래스
{
public class Name { get ; set ; }
public int Age { get ; set ; }
}
public class Dog : Animal //파생클래스 Dog : Animal
{
public void HowOld( )
{
Console.WriteLine("나이 : { 0 }", this.Age); //Base클래스의 Age 속성을 사용
}
}
public clss Bird : Animal
{
public void Fly( )
{
Console.WriteLine(" { 0 } 가 날다.", this.Name);
}
}
- 여기에서 this는 현재 객체를 가리키는 참조이다. this로 현재 객체의 속성이나 메서드에 접근할 수 있다.
C#의 클래스명 앞에 abstract라는 키워드를 붙이는 경우가 있다.
이것을 추상클래스 Abstract Class라고 하는데, 이러한 추상 클래스로부터는 객체를 직접 생성할 수 없다. 🚫
즉, new를 이용해서 클래스 객체를 생성할 수 없다는 뜻이다.
또 다른 경우로는 추상 클래스 안에 클래스의 임의의 멤버 안에 abstract 키워드를 붙이는 경우가 있는데,
이것은 해당 멤버가 구현되지 않은거고, 추상 클래스로부터 파생되는 파생클래스에서 반드시 그 멤버를 구현을 해주어야 한다는 것이다.
파생 클래스에서 상속된 abstract 메서드를 구현하기 위해서는 override라는 C# 키워드를 사용하여 그 메서드를 새로 정의하면 된다.
이번에도 예시로 찬찬히 살펴보자 📝
public abstract class PureBase
{
//abstract 키워드
public abstract int GetFirst( );
public abstract int GetNext( );
}
public class DerivedA : Purebase
{
private int no = 1;
public override int GetFirst( )
{
return no;
}
public override int GetNext( )
{
return ++no;
}
}
- public class DerideA : PureBase > > > 'DerideA'클래스가 'PureBase'를 상속받는 것을 의미합니다.
- private int no = 1; > > > no 는 DerideA의 인스턴스 변수로 초기값 1이다. 이 변수는 클래스 내부에서만 접근 가능하다.
(private 접근 제한자)
한마디로 요약하면, PureBase 추상 클래스는 GetFirst와 GetNext 이 두개의 추상 메서드를 정의한다.
GetFirst 메서드는 no의 현재 값을 반환
GetNext 메서드는 no의 값을 1 증가시키고, 반환
이상 클래스 상속 끝❗