sealed: 뒤에 public이든 protected이든 상속하지 못하게 함
ex) sealed public void Method() {}
overload: 여러 매개변수로 메서드를 만드는 것
ex) public void Method() {}
public void Method(int a) {}
public void Method(string a, int b) {}
virtual, override: 부모를 무시하고 재정의하는 것
parent ex) public virtual void Method() { Console.WriteLine("부모"); }
child ex) public override void Method() { Console.WriteLine("자식"); }
Main ex) Child test = new Child(); test.Method();
출력 결과: 자식
abstract: 형태만 구현, 부모에서 선언한 abstract 메서드를 자식에서 모두 구현해야함
추상 클래스는 선언하지 못함, 상속으로만 사용 가능
사용처: 정해진 형식으로 만들때
parent ex) abstract class Parent { public abstract void Method(); }
childex) class Child{ public override void Method(); }
다형성: 상위에서 하위 호출(일반적)
ex) Parent test = new Child();
new: 부모를 무시하고 재정의하는 것, override와 비슷하나 다름
재정의하고자하는 부모 메소드에 override가 들어가도 상관없이 새로 재정의함
다형성과 관련없이 자식 클래스에서 새로 정의함
ex) parent ex) public void Method() { Console.WriteLine("부모"); }
child ex) public new void Method() { Console.WriteLine("자식~"); }
Main ex) Child test = new Child(); test.Method();
Parent test2 = new Child(); test2.Method();
출력 결과: 자식~부모
interface: 다중 상속 가능
abstract처럼 구현없이 형식만 가지고 있음, 상속으로만 사용, 생성 불가
관례적으로 대문자 I를 인터페이스명에 붙임
ex) infterface IInterfacePrac { void Method(); }
infterface IInterfacePrac2 { void Method2(); }
class ClassPrac : IInterfacePrac, IInterfacePrac { public void Method() {}; public void Method2() {}; }