Construct using SysTableNameFactoryAttribute and SysExtensionAppClassFactory without record

Parent class with construct based on SysExtensionAppClassFactory
/// <summary>
///     Parent class             
/// </summary>
abstract class ParentClass
{
    public static ParentClass construct(TableId _tableRefId)
{ SysTableNameFactoryAttribute attribute = new SysTableNameFactoryAttribute(tableId2Name(_tableRefId)); ParentClass instance = SysExtensionAppClassFactory::getClassFromSysAttribute(classStr(ParentClass), attribute) as ParentClass;
if (!instance) { throw error(strFmt("@SYS23455", funcName())); } return instance; }     public void process() { //Some code } }

Implementation of the Child 1 using SysTableNameFactory Attribute
/// <summary>
///     Child class 1            
/// </summary>
[SysTableNameFactory(tableStr(TableName1))]
class ChildClass1 extends ParentClass
{
    public void process()
    {
        info('Child 1');
    }
}
Implementation of the Child 2 using SysTableNameFactory Attribute
/// <summary>
///     Child class 2            
/// </summary>
[SysTableNameFactory(tableStr(TableName2))]
class ChildClass2 extends ParentClass
{
    public void process()
    {
        info('Child 2');
    }
}
Example of use
internal final class RunnableClass1
{
    public static void main(Args _args)
    {
    	ParentClass::construct(tableNum(TableName1)).process();
    	ParentClass::construct(tableNum(TableName2)).process();
    }
}