Показать сообщение отдельно
Старый 07.08.2018, 19:16
caseyryan вне форума Посмотреть профиль Отправить личное сообщение для caseyryan Найти все сообщения от caseyryan
  № 2  
Ответить с цитированием
caseyryan
 
Аватар для caseyryan

Регистрация: Jun 2012
Адрес: Новосибирск
Сообщений: 6,644
Записей в блоге: 4
Цитата:
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
__________________
Ко мне можно и нужно обращаться на ты)