AS3 не пропускает функции, и вы не можете определить его как «менее развитый».
Во-первых, для вашей проблемы - существуют способы обойти методологию абстрактного класса.Для вашего абстрактного класса Character - вы можете сделать так, чтобы пользовательский разработчик получил ошибку при попытке его создания.
package com.strangemother.database.abstract
{
public class CentralDispatch extends EventDispatcher
{
private static var _centralDispatch:CentralDispatch;
public static function getInstance():CentralDispatch
{
if(!_centralDispatch)
_centralDispatch = new CentralDispatch(SingletonLock);
return _centralDispatch;
}
public function CentralDispatch(lock:Class)
{
if(!lock is SingletonLock)
{
throw new Error("CentralDispatch is a singleton. Use CentralDispatch.getInstance() to use.");
}
}
}
}
internal class SingletonLock{}
КАК вы можете видеть - это должно использоваться методом .getInstance - нов дополнение к этому, только этот класс может создать новое собственное существо, поскольку единственный класс которого может видеть внутренний класс SingletonLock {}.Для вашей цели - вы можете удалить метод 'getInstance ()' и заставить пользователя другим способом получить экземпляр этого класса.
Это также должно отображать возможность создания внутренних классов.Они не могут быть видны никакому другому классу - только этот пакет и родительский класс CentralDispatch могут использовать его.
Другой способ, которым вы можете использовать метод абстрактной функции - это записать затем в interface
package com.strangemother.database.engines
{
import com.strangemother.database.Model;
import com.strangemother.database.ModelSchema;
import com.strangemother.database.events.ModelEvent;
public interface IEngine
{
/**
* Reads modelSchema and calls generateModel upon
* each model found.
* */
function generateModelSchema(modelSchema:ModelSchema=null):String
/**
* Generate your CREATE syntax model to output to your SQL
*
* If you are extending the framework with your own database
* engine, you must override this with your own model generation
* format.
* */
function generateModel(model:Model):String
}
}
затем в любой момент, чтобы использовать это, вы реализуете его на уровне класса
public class SQLite3 extends EngineBase implements IEngine
{
теперь мой класс SQLite3 должен иметь методы, определенные в IEngine
Я предпочитаю писать классы с определенными функциями, которые переопределяются при реализации.
AbstractBase.as
/**
* connect to the database. This is not usually
* required as the abstraction layer should
* automatically connect when required.
* */
public function connect(onComplete:Function=null):void
{
SQLite3 из которых расширяется AbstractionBase в некоторый момент
overide public function connect(onComplete:Function=null):void
Теперь, чтобы опровергнуть @ комментарий Аллана о том, что он менее развит (Извините, чувак)
Нет перегрузки операторов - это правильно, но и Java тоже.он не был применен для обеспечения читабельности AS3.
Перегрузка функции - вы не можете ввести ее жестко, но вы можете function makeTea(...args)
передавать столько данных, сколько вам нужно.у вас также есть getter / setters.
для встроенных функций вы можете создавать анонимные функции.
var myFunction:Function = Function(name:String):String{ return name + ' - rocks!'; }
У вас есть динамические классы, поэтому перегрузка уровня класса -
и хорошим примером реального кода является Flex Lib - он с открытым исходным кодом, и вы можете прочитать, как все эти элементы управляются, просматривая код.