using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class Animal : MonoBehaviour // 조상클래스. abstract 메소드가 하나라도 존재한다면, abstract class 가 됨. 하지만 abstract class라 하더라도 그 안에 있는 모든 메소드가 추상 메소드여야 하는건 아니다.
// 구현되어 있는 메소드가 있어도 아무 상관 없다.
// 하지만 추상 메소드가 하나라도 존재한다면, 그 해당 클래스는 추상 클래스다.
// 추상 클래스는 상속 받아서 구현해줘야 쓸 수 있다.
// 추상클래스의 장점 : 공통점이 있는 '클래스의 조상'을 만들 수 있다. 조상 클래스(?ㅋㅋ 보통 'base클래스' 라고 함)가 구체적인 실현방법이 없더라도 일단 조상 클래스를 하나 만들어 놓고
// 상속받는 자손들을 만들면, 조상 클래스 하나만 바꾸면 자손들도 한꺼번에 바뀌기 때문에 처리가 수월함.
{
public abstract void Fly();
public void Introduce()
{
Debug.Log("안녕하세요, 동물입니다.");
}
}
=========================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bug : Animal // Animal을 상속받는 자식 클래스 1
{
public override void Fly()
{
Debug.Log("위잉위잉");
}
}
=========================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bird : Animal // Animal을 상속받는 자식 클래스 2
{
public override void Fly() // 추상 클래스를 구현할 때는 override 개념이므로, 해당 메소드에 'public override void - ' 이런 식으로 구현한다.
{
Debug.Log("푸드덕 푸드덕");
}
}
=========================================================
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class HelloWorld : MonoBehaviour
{
private void Start()
{
Bug dragonFly = new Bug();
dragonFly.Fly();
Bird sparrow = new Bird();
sparrow.Fly();
Animal someAnimal = new Bug(); // Bird와 Bug는 둘 다 Animal을 상속받은 것이기 때문에, 이런 식으로도 Bug를 넣을 수 있다. 물론, 새도 마찬가지.
someAnimal.Fly(); // 이렇게 구현하면, 만약 Bug라면 '위잉위잉' 이, Bird라면 '푸드덕 푸드덕' 이 적용됨.
}
}
댓글