ASP.NET C#

상속, abstract, virtual, new, override

ToKor 2021. 1. 8. 03:13

- 상속: 기존 클래스의 기능 그대로 가져와 사용하거나 업데이트하여 사용하는

- abstract 함수: 선언만 있고, 정의되지 않으며, 상속받은 자식에서 반드시 구현

- virtual 함수: 선언과 구현이 함께 있고, 상속받은 자식에서 반드시 구현 할 필요없음

- new: 일반함수를 재정의, 부모타입에 자식 인스턴스 생성하면 부모에 선언된 인스턴스따라감

- override: 상위 클래스에서 재정의 허락한 경우(abstract, virtual)에사용하며, 부모타입에 자식 인스턴스 생성하면 자식에서 선언한 인스턴스 따라감(확실한 재정의됨)

using System;

namespace Example
{
	public class Student
	{
		public void First()
		{
			Console.WriteLine("First");
		}
		
		public void Second()
		{
			Console.WriteLine("Second");
		}
		
		// virtual 함수
		public virtual void Third()
		{
			Console.WriteLine("Third");
		}
	}
	
	public class CopyStudent : Student
	{
		// 일반함수 재정의 - new
		public new void Second()
		{
			Console.WriteLine("Another Second");
		}
		
		// virtual함수 재정의 - override
		public override void Third()
		{
			Console.WriteLine("Another Third");
		}
		
		public void Fourth()
		{
			Console.WriteLine("Fourth");
		}
	}
	
	public class Program
	{
		// execute
		public static void Main(string[] args)
		{
			CopyStudent cs = new CopyStudent();
			cs.First();
			cs.Second();
			cs.Third();
			cs.Fourth();
            /*
	  			First
 	  			Another Second
      			Another Third
      			Fourth
    		*/
            
            Student cs = new CopyStudent();
			cs.First();
			cs.Second();
			cs.Third();
            /*
	  			First
 	  			Second
      			Another Third
      		*/
		}
	}
}