μ²μ νλ‘κ·Έλλ°ν λ μ½κ² νΌλνλ λ¨μ΄κ° λ°λ‘ μ€λ²λ‘λ(Overload)μ μ€λ²λΌμ΄λ(Override) μ λλ€.
λ©μλ μκ·Έλμ²(Signature) : λ©μλ μ΄λ¦ + λ§€κ°λ³μ μ 보(κ°μ λ° νμ μ 보)
- λ©μλ μ΄λ¦μ κ°μμΌ ν¨.
- λ§€κ°λ³μ μ 보(κ°μ λ° νμ μ 보)λ λ¬λΌμΌ ν¨.
class Test
{
static void Main(string[] args)
{
var over = new OverLoadingTest();
over.test();
over.test(1, 3);
over.test(3.3f);
}
}
public class OverLoadingTest
{
public void test()
{
Console.WriteLine("λ§€κ°λ³μ μμ");
}
public void test(int a , int b)
{
Console.WriteLine($"λ§€κ°λ³μ : {a} , {b}");
}
public void test(double d)
{
Console.WriteLine($"doubleν λ§€κ°λ³μ : {d}");
}
}

π virtual VS astract
virtual
- virtual ν€μλλ μ μ ν΄λμ€λ₯Ό μ μΈν λͺ¨λ ν΄λμ€μμ μ¬μ© κ°λ₯.
- virtual ν€μλλ‘ μ μν μμ±μ΄λ λ©μλλ λ³Έλ¬Έμ μ μν μ μμ.
- μ κ·Ό νμ μλ public, interanl, protected (private μ¬μ© λΆκ°)
- μμ ν΄λμ€μμ ν¨μ μ¬μ μκ° μ νμ μΌλ‘ μ΄λ£¨μ΄μ§
abstract
- abstract ν€μλλ μ μΈνλ ν΄λμ€λ λ°λμ abstract ν΄λμ€μ¬μΌ ν¨.
- abstract ν€μλλ‘ μ μν μμ±μ΄λ λ©μλλ λ³Έλ¬Έμ μ μν μ μμ.
- μ κ·Ό νμ μλ public, interanl, protected (private μ¬μ© λΆκ°)
- μμ ν΄λμ€μμ ν¨μ μ¬μ μκ° νμλ‘ μ΄λ£¨μ΄μ§
class Test
{
static void Main(string[] args)
{
Gun gWeapon = new Gun();
gWeapon.name = "ShotGun";
gWeapon.damage = 23;
gWeapon.type = "μ·κ±΄";
gWeapon.Print();
Weapon wWeapon = new Gun();
wWeapon.name = "DEagle";
wWeapon.damage = 7;
//wWeapon.type = "κΆμ΄"; λΆλͺ¨μ ν΄λμ€ λ©€λ²λ§ μ κ·Ό κ°λ₯
wWeapon.Print();
}
}
public class Weapon
{
public String name;
public int damage;
public virtual void Print()
{
Console.WriteLine($"μ΄ λ¬΄κΈ°μ μ΄λ¦μ {name} , λ°λ―Έμ§λ {damage} μ
λλ€.");
}
}
public class Gun : Weapon
{
public String type;
public override void Print()
{
Console.WriteLine($"μ΄ λ¬΄κΈ°μ μ΄λ¦μ {name} , λ°λ―Έμ§λ {damage} μ
λλ€.");
Console.WriteLine($"μ΄ λ¬΄κΈ°λ {type} μ
λλ€.");
}
}

λΆλͺ¨ κ°μ²΄μ μμ μΈμ€ν΄μ€λ₯Ό λ΄μ wWeaponμ μμ ν΄λμ€μ μλ λ³μ typeκ°μ μ°Έμ‘°νλ €κ³ νλ©΄ μ°Ύμ μ μλ€λ μ€λ₯κ° λ©λλ€.
class Test
{
static void Main(string[] args)
{
Gun gWeapon = new Gun();
gWeapon.name = "ShotGun";
gWeapon.damage = 23;
gWeapon.type = "μ·κ±΄";
gWeapon.Guess();
Weapon wWeapon = new Gun();
wWeapon.name = "DEagle";
wWeapon.damage = 7;
//wWeapon.type = "κΆμ΄"; λΆλͺ¨μ ν΄λμ€ λ©€λ²λ§ μ κ·Ό κ°λ₯
wWeapon.Guess();
}
}
public class Weapon
{
public String name;
public int damage;
public void Guess()
{
Console.WriteLine($"μ΄ λ¬΄κΈ°μ μ΄λ¦μ {name} , λ°λ―Έμ§λ {damage} μΌκ±Έ??");
}
}
public class Gun : Weapon
{
public String type;
public new void Guess()
{
Console.WriteLine($"μ΄ λ¬΄κΈ°μ μ΄λ¦μ {name} , λ°λ―Έμ§λ {damage} μΌκ±Έ??");
Console.WriteLine($"μ΄ λ¬΄κΈ°λ {type} μΌκ±Έ??");
}
}

Guess λ©μλ μ μμ ν΄λμ€ λ³μμΈ typeμ΄ λ€μ΄κ° Console.WriteLine(); μμ²΄κ° μλμ€λλ°, μ€λ₯μΈμ§ λΆλͺ¨ κ°μ²΄μ μμ μΈμ€ν΄μ€λ₯Ό λ΄μ wWeaponμ νΉμ§μΈμ§ μμΈν λͺ¨λ₯΄κ² μ΅λλ€.
new λ λ€νμ±κ³Όλ μλ¬΄λ° μ°κ΄μ΄ μμ΅λλ€.
λ¨μν μμ ν΄λμ€μμ μλ‘μ΄ μ μνλ€λ κ²μ λλ€
- μ€λ²λΌμ΄λ©μ νμ κ²½μ° : μμ ν΄λμ€(Child)μ μ€λ²λΌμ΄λ λ λ©μλκ° μ€νλ©λλ€.
- new λ‘ μ¬μ μ ν κ²½μ° : λΆλͺ¨ ν΄λμ€(Parent)μ μ λ©μλκ° μ€νλ©λλ€
μ€λ²λΌμ΄λ© κ°μ κ²½μ°λ μν©μ μ μκ°νκ³ μ¬λ°λ₯Έ λ°©λ²μ μ¬μ©νλκ²μ΄ μ’κ² μ΅λλ€.
μ κ° λ°°μ°λ μ±
μμλ virtual + override λ°©λ²μ΄ κ°μ₯ μ’μ λ°©λ²μ΄λΌκ³ ν©λλ€.