'Human', 'Student' 스크립트 2개 미리 생성
<Human 스크립트>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
abstract public class Human : MonoBehaviour
{
// public : 타 클래스에서 모두 사용 가능
// protected : 상속 받은 자식 클래스에서만(여기서는 Human 클래스) 사용 가능
protected string humanName;
protected int humanAge;
protected virtual void Info() // 가상 함수. 자식 클래스에서 재정의 하고 싶을 때 virtual을 적어줌으로써 가상 함수를 만들어 준다. override 와 virtual이 함께 잘 쓰인다.
// 자식클래스에서 override를 통해 추가 편집 가능 및 완성시킬 수 있음.
{
print("나는 어린이 입니다.");
}
// 자식 클래스에서 꼭 만들어야 하는 함수가 있음에도, 클래스 개수가 많아 누락시키는 경우, 부모 클래스에서 꼭 만들어라고 명시해주는 역할 => '추상 함수(abstract)'
// 추상 함수는 자식 클래스에서 기능을 완성시켜야 되는 함수다.
// 가상 함수는, 부모 클래스에서 어느 정도 기능을 구현하고 자식 클래스에서 추가 편집 및 기능 완성을 구현하지만,
// 추상 함수는, 아예 미완성인 상태로 남겨둔다. 완성은 무조건 자식 클래스에서 하도록 한다. 그래서 class에도 똑같이 abstract를 적어서 추상 클래스로 만들어줘야 된다.
abstract protected void Name();
}
<Student 스크립트>
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Student : Human // Human 스크립트를 상속받음(Human : 부모, Student : 자식)
{
// Human 스크립트에 있는 humanName과 humanAge를 끌여다가 사용해보자.
string schoolName;
void Start()
{
schoolName = "수영초등학교";
humanName = "LSB";
humanAge = 13;
Info();
}
protected override void Info() // override = 재정의. 상속을 당하는 함수는 virtual이어야 한다.
{
base.Info(); // base가 가리키는건 부모 클래스. 즉, Human의 Info를 가리키는 것.
print("나는 학생입니다."); // Human에서의 Info는, "나는 어린이 입니다."였는데, 상속을 이용하여 "나는 학생입니다."로 재정의 함.
}
protected override void Name()
{
print(humanName);
}
}
댓글