클래스상속
- 부모객체의 특성을 자식객체가 물려받는것
- 코드의 재사용
- 유지 보수 원할
- 상속(Inheritance)
- 파생(Derive)
- 확장(Extend)
기본클래스(부모클래스)상속
- 단일 클래스 상속만 허용
- 기본 클래스에서 public멤버는 파생 클래스에서 public멤버
- 기본클래스에서 protected멤버는 파생 클래스에서 protected멤버
- 기본 클래스에서 private멤버는 파생 클래스에서 상속불가
class Printer //추상적인 개념이 상위에 있는것이 상속관계를 만들었을때 더 쉬워진다.
{
public string printerName ="HP";
private string owner ="홍길동";
public void PrintMono()
{
Console.WriteLine("Printer클래스에서 흑백출력");
}
}
//Printer 클래스 상속
class HP: Printer
{
public string printerType = "Deskjet";
}
class MainClass
{
[STAThread]
static void Main(string[] args)
{
HP hp = new HP();
//기본클래스 멤버 사용
hp.PrintMono();
Console.WriteLine("프린터 명 : {0}", hp.printerName);
//파생클래스 멤버사용
Console.WriteLine("프린터 종류 : {0}", hp.printerType);
//Console.WriteLine("프린터 소유자 : {0}", hp.owner);
//private 변수는 상속받지 못한다.
}
}
상속전이(Transformation)
- 부모의 멤버를 자식이 자식의 멤버를 그 자식이 물려받는 경우
암시적으로 기본 클래스 생성자 호출
- 기본 클래스 생성자도 상속가능
명시적으로 기본 클래스 생성자 호출
- base키워드 : 객체 자신의 부모객체
- 클래스 상속과 마찬가지로 ':'를 파생클래스 생성자 뒤에 붙이고 기본 클래스 생성자의 파라미터를 써준다.
- base 키워드로 부모 멤버에 접근가능
class Printer
{
public string printerName;
public Printer() //기본생성자
{
Console.WriteLine("Printer클래스의 매개변수가 없는 기본생성자");
}
public Printer(string printerName) //기본생성자 오버로딩
{
this.printerName=printerName;
Console.WriteLine(this.printerName);
}
}
class HP640 : Printer
{
//부모클래스인 Printer의 기본생성자 호출
// public HP640(): base() //매개변수가 없는 기본생성자 호출
public HP640(): base("프린터") //매개변수가 있는 기본생성자 호출
{
Console.WriteLine("HP640프린터");
}
}
class HPC : HP640
{
public HPC() : base() //부모클래스인 HP640의 기본생성자 호출
{
Console.WriteLine("HPC프린터");
}
}
public class MainClass
{
public static void Main()
{
HP640 hp = new HPC();
Console.Read();
}
}
[출처] [펌] [20040506] 클래스 상속|작성자 눈꽃천사