Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[11143] 질문) 추상클래스에서 인스턴스가 생성되요.
ibuilder [] 1712 읽음    2006-11-29 14:29
다음은 주정섭님의 글입니다.

---------------------------------------------------------------------------------
* 추상 메소드
델파이 컴포넌트에서 어떤 메소드들은 abstract 로 선언된다. VCL 에서는 이러한 추상 메소드들이 ‘custom’이라는 이름으로 시작하는 클래스에서만 존재한다. 이러한 클래스들은 그들자신이 추상 클래스이고 이 클래스들은 오직 다른 하위 클래스들의 상속을 위해서만 존재한다. 이러한 추상적인 구성 요소를 가진 클래스는 인스턴스 객체를 생성할 수 없다.
----------------------------------------------------------------------------------

그런데 제가 만든 추상클래스에선 객체가 생성되더군요.
아래 소스에서 AbstractClass 클래스는 AbstractMethod란 추상메서드를 가지고 있습니다. 그런데 ac := AbstractClass.Create; 로 버젖이 인스턴스도 만들어 지고, 생성자 마져 실행되더군요.  다만 추상메서드를 호출할때에만 런타임 에러를 네더군요. 물론 이 클래스를 상속한 클래스  인스턴스 에서의 추상메서드 호출은 문제 없구요.

컴파일 할때, 추상클래스로 인스턴스를 만들려한다는 경고만 낼뿐, 생성에 문제가 없던데, 도대체 이게 납득이 되지 않습니다.
무엇이 잘못된것일까요?
또 한가지 의문은 추상클래스를 상속한 클래스에서 추상메서드를 구현하지 않아도 에러를 발생시키지 않더군요.
C#에서는 단번에 컴파일 에러를 내고 벗어 버리던데.....

질문을 요약하면
1) 추상클래스에서 인스턴스가 만들어 지는 이유.
2) 추상클래스를 상속한 하위클래스에서 추상메서드를 구현하지 않아도 컴파일 에러가 없는이유..

도움 부탁드립니다. 감사합니다.


program Project3;

{$APPTYPE CONSOLE}

uses
  SysUtils;

type
AbstractClass = class(TObject)
  constructor Create;
  procedure AbstractMethod; virtual; abstract;
end;

ChildObject = class(AbstractClass)
  constructor Create;
  procedure AbstractMethod; override;
end;

constructor AbstractClass.Create;
begin
  writeln('constructor message');
end;

constructor ChildObject.Create;
begin
  inherited;
end;

procedure ChildObject.AbstractMethod;
begin
  writeln('Child AbstractMethod Message');
end;

var
ac : AbstractClass;
co : ChildObject;
begin
  ac := AbstractClass.Create;  // 추상클래스의 인스턴스 생성 , 컴파일할때 Error가 되어야 하지 않나요?
  ac.AbstractMethod(); // runtime error

  co := ChildObject.Create;
  co.AbstractMethod(); // Ok
  readln;
end.

+ -

관련 글 리스트
11143 질문) 추상클래스에서 인스턴스가 생성되요. ibuilder 1712 2006/11/29
11167     Re:질문) 추상클래스에서 인스턴스가 생성되요. 박지훈.임프 2305 2006/12/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.