같은 이름의 코드가 여러가지 형태를 띠고 다양한 역할을 함.
부모 클래스의 메서드를 자식 클래스에서 재정의 하는 것
접근 제한자 virtual 반환타입 메서드 이름(매개변수) //부모 클래스의 메서드
{
}
접근 제한자 override 반환타입 메서드 이름(매개변수) //자식 클래스의 메서드
{
}
이때 두 메서드는 같은 접근 제한자, 반환 타입, 이름, 매개변수를 가져야 함.
public virtual void Walk(){ //Human 클래스
Debug.Log("walk");
}
public override void Walk(){ //Baby 클래스
Debug.Log("crawl");
}
void Start() { //PlayerController 클래스
Human sujin = new Human("sujin", 12, 147);
Baby jake = new Baby("jake", 3, 62);
Human chris = new Baby("chris", 6, 110);
sujin.Walk();
jake.Walk();
chris.Walk();
}

메서드를 재정의 하는 것이 아니라 완전히 별개의 메서드로 새로 정의하려면 new 키워드 사용
override → new로 변경

같은 클래스 내에서 식별자가 같지만 매개변수가 다른 여러 개의 메서드를 정의하는 것
public void Eat(){ //Human 클래스
Debug.Log("eat");
}
public void Eat(string food){
Debug.Log("eat " + food);
}
void Start() { //PlayerController 클래스
Human sujin = new Human("sujin", 12, 147);
sujin.Eat();
sujin.Eat("Rice");
}
public int Add(int a, int b){
return a + b;
}
public float Add(float a, float b){
return a + b;
}
public double Add(double a, double b){
return a + b;
}