Цитата:
1. Если 2 интерфейса имплементируются одновременно, то я могу записать их через запятую:
|
Можешь. А можешь и не записывать, а сделать вот так, к примеру
Код AS3:
public interface IDisposable {
function dispose():void;
}
public interface IMovable extends IDisposable {
function moveTo(x:Number, y:Number):void; // у этого интерфейса будет и описание метода dispose(), но самому IMovable он как бы не нужен
}
И потом применить только IMovable. Это гарантирует что у твоего класса будут и методы moveTo() и dispose()
Цитата:
Как тогда: делать их полностью независимыми или наследовать по каким-то другим критериям, не описанным в интерфейсе?
|
Наследуй так же как обычно. Применение классом каких-либо интерфейсов не противоречит обычному наследованию им другого класса.
Код AS3:
public class SomeClass extends Sound implements IDisposable {
public function SomeClass () {}
public function dispose():void {} // обязательно применяет метод интерфейса. Без этого даже не скомпилится
}
public class SomeMovableClass extends Sprite implements IMovable {
public function SomeMovableClass () {}
public function moveTo(x:Number, y:Number):void { // обязательно применяешь
// какая-то логика
}
public function dispose():void { // так же обязательно. потому что есть в IDisposable
}
}
....
var movable:SomeMovableClass = new SomeMovableClass();
trace(movable is IDisposable); // true
trace(movable is IMovable); // true
var someClass:SomeClass = new SomeClass();
trace(someClass is IDisposable); // true
trace(someClass is IMovable); // false