❓Override
부모 클래스에서 정의된 함수를 자식 클래스에서 재정의하고 싶다면, 부모 클래스에서 가상 함수로 정의하고, 자식 클래스에서 오버라이딩 해주면 된다.
부모 클래스
public class Human : MonoBehaviour { protected string humanName; protected int humanAge; protected virtual void Info() // 가상함수 선언(부모 클래스에서도 완성된 함수 형태로 선언해야 함) { print("나는 인간입니다."); } }
protected로 선언된 변수들은 해당 클래스 또는 상속받은 자식 클래스에서만 접근 가능
virtual
은 재정의가 될 수 있음을 의미한다
자식 클래스
public class Student :Human { string schoolName; protected override void Info() // 오버라이드, 재정의 { //base.Info(); //부모 클래스의 Info()가 실행된다는 의미 print("나는 학생입니다."); } }
🖨결과
Info()메서드는 기본적으로 “나는 인간입니다.”를 출력하지만, base.Info()를 호출하게 되면 부모 클래스인 “나는 인간입니다.”를 출력하고, "나는 학생입니다."가 출력된다.
출처 : https://wikidocs.net/124904
❓new
new를 썼을때 이전에 있는 함수도 상관 없이 자기가 새로 만들겠다라는 의미
이름만 같고 다른 함수
기존(부모)에 있던 동일 이름의 함수를 무시하고, 완전 새로운 함수로 선언
🖨결과
같은 이름의 함수를 호출했을때
파라미터가 다르면 부를 때 이름이 같더라도 어떤 함수를 불렀는지 구분할 수 있다.
💻코드
맨 오른쪽(아래)의 코드를 보면 같은 함수를 호출하고 있지만 파라미터가 다른 모습을 볼 수 있다.
🖨결과