같은 이름의 코드가 여러가지 형태를 띠고 다양한 역할을 함.

메서드 오버라이드

부모 클래스의 메서드를 자식 클래스에서 재정의 하는 것

접근 제한자 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();
}

image.png

new

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

override → new로 변경

image.png

메서드 오버로드

같은 클래스 내에서 식별자가 같지만 매개변수가 다른 여러 개의 메서드를 정의하는 것

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;
}