приватный и статический - ну, например есть класс-фабрика, и мы хотим создавать объекты статическим методом типа MyFactory.createObject("objectType") - и, например, нам нужно сделать счетчик / уникальный идентификатор для каждого нового объекта доступный только из самого объекта (потому что если мы сможем его модифицировать у класса-фабрики он может перестать быть уникальным =)
еще пример - синглтон с ленивой инициализацией - нужно создать только 1 экземплар класса, но мы не хотим явно его создавать, а чтобы он был создан / проверен на существование внутри какого-то из его методов - таким образом, например, можно добиться чего-то похожего на множественные конструкторы одного класса (типичное использование - флешка может быть скомпилирована как модуль/как самостоятельное приложение, а нам нужна утилита кторая будит выводить какую-нибудь информацию о том, что в ней происходит, но в разных ситуациях вывод будет разным)

Код:
class Debugger {
private static var d:Debugger;
private function Debugger(){}
private static function createStandaloneDebugger():Debugger
{
return Debugger(new StandaloneDebugger()); // StandaloneDebugger extends Debugger
}
private static function createNetDebugger():Debugger
{
return Debugger(new NetDebugger()); // NetDebugger extends Debugger
}
public static function tracer(s:String):Void {
if (isStandalone){
if (!d) d = createStandaloneDebugger();
} else {
if (!d) d = createNetDebugger();
}
}
}
Ну и еще много чего можно придумать