Babylon Вы так часто говорите, что использование интерфейсов - это плохая практика.Что я решил спросить, чем же плоха реализация через интерфейсы?Приведу очень простой пример, на основании его можем и обсудить плюсы и минусы интерфейсов.

Код AS3:
package
{
public interface IFruit
{
function getCallories():String;
}
}

Код AS3:
package
{
public class Apple implements IFruit
{
private var callories:uint;
public function Apple()
{
callories = 100;
}
public function getCallories():String
{
return "Яблоко иеет " + callories + " каллорий.";
}
}
}

Код AS3:
package
{
public class Pear implements IFruit
{
private var callories:uint;
public function Pear()
{
callories = 150;
}
public function getCallories():String
{
return "Груша иеет " + callories + " каллорий.";
}
}
}

Код AS3:
package
{
public class Plum implements IFruit
{
private var callories:uint;
public function Plum()
{
callories = 75;
}
public function getCallories():String
{
return "Слива иеет " + callories + " каллорий.";
}
}
}

Код AS3:
package
{
import flash.text.TextField;
import flash.text.TextFieldAutoSize;
public class MyTextField extends TextField
{
private var fruit:IFruit;
public function MyTextField(fruit:IFruit)
{
this.fruit = fruit;
this.border = false;
this.background = false;
this.autoSize = TextFieldAutoSize.LEFT;
this.text = this.fruit.getCallories();
}
}
}

Код AS3:
package
{
import flash.display.Sprite
public class Main extends Sprite
{
private var apple:IFruit;
private var pear:IFruit;
private var plum:IFruit;
private var text1:MyTextField;
private var text2:MyTextField;
private var text3:MyTextField;
public function Main()
{
apple = new Apple();
pear = new Pear();
plum = new Plum();
text1 = new MyTextField(apple);
text2 = new MyTextField(pear);
text2.y = 50;
text3 = new MyTextField(plum);
text3.y = 100;
addChild(text1);
addChild(text2);
addChild(text3);
}
}
}
Плюсами я считаю, что при такой реализации, меньше вероятность допустить ошибки, которые могут возникнуть из-за человеческого фактора(забыли реализовать метод).Еще один плюс когда я передаю в конструктор класса MyTextField объект,происходит проверка типа данных и не передадим уже неправильный объект.А если мы передали интерфейс, то со сто процентной уверенностью мы знаем, что у его имплементации есть метод, который описан в интерфейсе и мы его без проблем вызываем.