클래스는 어떤 개체를 생성하기 위한 틀이다.
인스턴스란 클래를 기본으로 생성한 개체를 말한다
인스턴스=실체=오브젝트=객체 같은 말이다.

상속이란 한 글래스가 다른 클래스에게 자신의 멤버를 물려주는거
여기에는 상속을 해주는 부모 클래스와, 상속을 받는 클래스 자식 클래스(또는 파생 클래스)가 있다.

InHerits는 기본 클래스를 지정한다.
MustInHerits는 해당 클래스는 인스턴스를 행성할수 없고, 이클래스를 상속한 자식 클래스의 인스턴스만 생성할수 있다. 이를 추상 클래스라고 한다.
NotInHeritable는 상속이 되지 않는 클래스를 말한다, 즉 자식 클래스를 만들수 없는 클래스이다. 이를 봉인 클래스라 한다.

Is-a 상속 관계는 A 클래스는 B클래스이다. 이런 상속 관계(명시적으로 클래스를 상속 한다는 것을 지정해야 한다)
has-a 상속 관계는 A 클래스는 B클래스를 포함한다.(명시적으로 클래스 상성을 지정하지 않고, 클래스 내에서 포함할 클래스의 개체를 생성하고,사용하는 것을 말한다)

개체를 참조시 개체 변수형이 부모 클래스 인경우에는 자식 클래스를  부모 클래스에 가능하나, 개체 변수형이 자식 클래스 형일 경우일 때, 부모 클래스를 자식 클래스에 할당하는 것은 불가능하다.

가상메소드: 자식 클래스들이 똑같은 메소드를 갖고 있으나 부모 클래스는 그 메소드가 없을 경우에,
수천개의 자식 개체를 생성했다고 가정 때,
가상 메소드가 없다면 일일이 자식 개체의 메소드를 호출해 주어야 한다.
그러나 가상 메소드를 사용한다면 간단하게 루프를 돌릴수 있다.
위에서도 말했듯이 자식 클래스는 부모 클래스형 변수에 참조 시킬수 있다라고 했다.
따라서 부모 클래스 변수의 배열을 선언하고, 생성한 자식 클래스의 개체를 참조시킨다.
그러나 아직 가상 메소드를 사용하지 않았기 때문에 자식 클래스에는 다 같은 이름으로 있는 메소드인데, 부모 클래스에는 그런 이름의 메소드가 없는 메소드를 호출하려면, CType으로 형변환을 한 후에 자식 메소드를 호출해주어야 한다.
마찬가지로 루프를 돌릴수 없다.
그러면 가상 메소드를 사용해보자.
부모 클래스에 가상메소드에서 똑같은 이름으로 사용하는 메소드를 부모 클래스에서 Overridable 함께 선언을 하고. 자식클래스의 메소드에는 Overrides를 지정하게되면, 가상 메소드를 호출하게 되면, 부모 클래스 변수에 할당된 개체의 형에 따라서 그 클래스의 메소드를 호출하게 된다.

+ Recent posts