상속, 추상 클래스
개요
- 상속
- 추상 클래스
- override, overload
상속
- 상위 class의 속성을 물려받아 하위 class가 사용하는 것을 의미합니다.
- 상위 class의 접근 제한자에 따라 하위 class가 접근할 수 있는 범위를 지정할 수 있습니다.
- 상위 class에서 정의 되지 않은 것을 하위에서 세부적으로 정의할 수 있습니다.
- 상속은 한번만 받을 수 있습니다.단, 상속 받은 객체를 다시 상속할 수 있습니다.(aaa를 상속받은 aa를 상속받은 a)
- 상속 받는 법은
class명 : 상우class명
void Main()
{
aaa bbb = new aaa();
aa bb = new aa();
a b = new a();
bbb.PrintAll();
Console.WriteLine();
bb.PrintAll();
Console.WriteLine();
b.test();
}
class aaa
{
private int health { get; set; } = 100;
protected int gold { get; set; } = 50;
public int lvl { get; protected set; } = 1;
public void PrintAll()
{
Console.WriteLine(health);
Console.WriteLine(gold);
Console.WriteLine(lvl);
}
}
class aa : aaa
{
}
class a : aa
{
public void test()
{
Console.WriteLine("aaa를 상속 받은 aa를 상속 받은 a");
}
}
100
50
1
100
50
1
aaa를 상속 받은 aa를 상속 받은 a
- 하지만, 이런 과정은 협업과정에서 문제를 일으킬 수도 있으며, 필요한 경우 일부 바꿔서 쓰는 등을 해야할 때가 있습니다.
추상 클래스
- 추상 클래스란 상위 객체가 대략적인 틀을 제공한다면, 하위 객체에서 이 틀을 기반으로 세부구현을 할것을 강제하는 것을 말합니다.
- 추상 클래스로 만들게 되면, 프로그래머의 실수를 줄이면서, 상위 객체에 책임을 줄이고, 서로 다른 하위 객체에서 세부구현을 강제할 수 있기 때문에, 코드의 완성도가 올라갑니다.

- 추상 클래스로 선언된 클래스는 인스턴스를 생성할 수 없기 때문에 선언 자체를 막을 수 있습니다.

- 위 사진 처럼 만약 추상 클래스를 선언하였지만, 구현을 하지 않을 경우 컴파일러가 오류를 알려줍니다.
void Main()
{
a b = new a(100, 50, 3);
b.PrintAll();
}
abstract class aaa
{
private int health { get; set; }
protected int gold { get; set; }
public int lvl { get; protected set; }
protected aaa(int hp, int moeny, int level)
{
health = hp;
gold = moeny;
lvl = level;
}
public abstract void PrintAll();
}
class a : aaa
{
public a(int hp, int money, int levle) : base(hp, money, levle)
{
}
public override void PrintAll()
{
Console.WriteLine(gold);
Console.WriteLine(lvl);
}
}
50
3
override, overload
override는 추상 클래스(또는 virtual)로 상위 객체에 함수를 덮어씌우기를 진행하겠다는 의미로, 상위에서 구현하지 않은 세부 함수를 구현하기 위해 사용합니다.
overload는 여러 함수가 존재할때 요소에 따라 접근할 함수를 다르게 선택할 수 있는 방식을 말합니다
void Main()
{
Sum(1, 2);
Sum(3, 4, 5);
}
void Sum(int a, int b)
{
Console.WriteLine(a + b);
}
void Sum(int a, int b, int c)
{
Console.WriteLine(a+b+c);
}