Listing 1

<cfcomponent extends=" Person" displayname="Abstract Employee">
<cfparam name="My" type="struct" default="#structNew()#">
<cfset My.Title = "">
<cfset My.Salary = "$0.00">
<cfset My.Boss_ID = "">
<!--- methods --->
<cffunction name="init" access="public" returntype="string">
<cfargument name="Employee_ID" required="Yes" default="">
<cfquery name="qGet" datasource="Employee">
Select *
From Employee
Where trim(Employee_ID) = '#arguments.Employee_ID#'
</cfquery>
<cfset My.Name = qGet.Name>
<cfset My.Title = qGet.Title>
<cfset My.Salary = qGet.Salary>
<cfset My.Boss_ID = qGet.Boss_ID>
<cfreturn this>
</cffunction>
<cffunction name="display" access="public" returntype="void"
output="Yes">  - #My.FirstName# #My.LastName#<br>  <#My.Title#> [#dollarformat(My.Salary)#]
</cffunction>
</cfcomponent>

Listing 2

<cfcomponent extends="com.mycompany.AEmployee"
displayname="ContractEmployee">
<cfparam name="My" type="struct" default="#structNew()#">
<cfset My.HourlyRate = "">
<!--- methods --->
<cffunction name="init" access="public" returntype="struct">
<cfargument name="employee_id" required="Yes" default="">
<cfquery name="qGet" datasource="Employee">
Select *
From Employee
Where trim(employee_id) = '#trim(arguments.employee_id)#'
</cfquery>
<cfset My.Name = qGet.Name>
<cfset My.Title = qGet.Title>
<cfset My.HourlyRate = qGet.HourlyRate>
<cfset My.Boss_ID = qGet.Boss_ID>
<cfreturn this>
</cffunction>
<cffunction name="display" access="public"
returntype="void" output="Yes">
<cfargument name="prefix" required="Yes" default="-">
#arguments.prefix# #My.Name#  (Contractor)<br>
 <#My.Title#> [#dollarformat
(My.HourlyRate)#/Hour]<br><br>
</cffunction>
</cfcomponent>

Listing 3

<cfcomponent extends="com.mycompany.AEmployee"
displayname="FullTimeEmployee">
<cfparam name="My" type="struct" default="#structNew()#">
<cfset My.ChildrenSet = "">
<cfset My.ChildrenObjectArray = Arraynew(1)>
<!--- methods --->
<cffunction name="init" access="public" returntype="struct">
<cfargument name="employee_id" required="Yes" default="">
<cfset var x = 0>
<cfset var thisEmployee = "">
<cfquery name="qGet" datasource="Employee">
Select *
From Employee
Where trim(employee_id) = '#arguments.employee_id#'
</cfquery>
<cfset My.Name = qGet.Name>
<cfset My.Title = qGet.Title>
<cfset My.Salary = qGet.Salary>
<cfset My.Boss_ID = qGet.Boss_ID>
<cfquery name="qGetAgain" datasource="Employee">
Select *
From Employee
Where trim(Boss_ID) = '#arguments.employee_id#'
</cfquery>
<cfset My.ChildrenSet = qGetAgain>
<cfif My.ChildrenSet.recordcount GT 0>
<cfloop query="My.ChildrenSet">
<cfset temp = "com.mycompany.#EmployeeType#Employee">
<cfset thisEmployee = createObject("component",temp).
init(Employee_ID=My.ChildrenSet.Employee_ID)>
<cfset My.ChildrenObjectArray[My.ChildrenSet.currentrow]
= thisEmployee>
</cfloop>
</cfif>
<cfreturn this>
</cffunction>
<cffunction name="display" access="public" returntype="void"
output="Yes">
<cfargument name="prefix" required="Yes" default="-">
#arguments.prefix# #My.Name#<br>
 <#My.Title#> [#dollarformat(My.Salary)#]<br>
<cfset arguments.prefix = "#arguments.prefix#-">
<cfloop from="1" to="#arraylen(My.ChildrenObjectArray)#"
index="theChild">
#My.ChildrenObjectArray[theChild].display(arguments.prefix)#
</cfloop><br>
</cffunction>
</cfcomponent>