2009-07-23 13 views
5

W Actionscript 3 nie mogę zadeklarować vars w interfejsach. Nie rozumiem tego. Wiem, że mogę tego dokonać, definiując moduły pobierające i ustawiające, ale co, jeśli po prostu chcę mieć prostą własność publiczną? Zwykle używam modułów pobierających i ustawiających, jeśli jest coś do zrobienia, gdy ustawiam lub otrzymuję właściwość, ale co jeśli chcę tylko zapisać wartość?Dlaczego właściwości nie są deklarowane w interfejsach

Odpowiedz

0

Nie jestem programowaniem aktorskim, ale interfejsy (na przykład w java) mają definiować zachowanie, a nie stan, więc intrerfaces w jave po prostu deklarują metody, które klasa implementująca interfejs musi zdefiniować. Właściwości (lub zmienna instancji) nie są na ogół konieczne do zdefiniowania zachowania i są niedozwolone w interfejsach.

+0

Properties nie są takie same jak zmienne instancji. –

+1

+1 na to ... co do zasady ... ponieważ nie jest tak naprawdę dla AS3 ... istnieje rozróżnienie między właściwościami (dostarczonymi przez akcesorów) i zmiennymi ... Z zewnątrz jest to całkowicie przezroczyste, bycie IDENTYCZNYM na poziomie składni ... ale skutecznie dostęp do właściwości oznacza wywołanie, a dostęp zmienny nie ... interfejsy mogą deklamować właściwości, ale nie zmienne ... to nie jest w 100% spójne ani rozsądne ... ale takie jest życie, tak myślę ... :) – back2dos

2

Można to ująć w następujący sposób: istnieją interfejsy, ponieważ w Twoim języku nie można dziedziczyć po wielu abstrakcyjnych klasach podstawowych. Jeśli AS3 pozwoliłoby ci to zrobić, prawdopodobnie nie miałby "interfejsów", ale "czystych abstrakcyjnych klas".

Innymi słowy, posiadanie właściwości implementacji w interfejsie prowadziłoby do konfliktów nazw, a stamtąd do innych problemów z wielokrotnym dziedziczeniem (diament).

Jednak posiadanie tylko chwytaka lub setera bez implementacji powinno zadziałać.

public interface I { function get A():int; } 

(nie mam kompilatora AS3 pod ręką)

+1

twoja odpowiedź jest właściwym rozwiązaniem ... mimo że całkowicie nie zgadzam się co mówisz o interfejsach ... dziedziczenie jest z natury złe ...: D ... nie, poważnie ... punkt dziedziczenie to CODE REUSE ... ale zwykle jest niewłaściwie używane, aby osiągnąć to, do czego są przeznaczone interfejsy: opisujące rolę obiektów ... złota reguła: klasy definiują implementację, zachowania interfejsów ... nie używają klas, aby wymagać zachowania ... nie pisz jakiejś metody (somePa ram: SomeClass), napisz jakiś Metod (niektóreParam: SomeInterface) ... to jest znacznie bardziej elastyczne/rozszerzalne i czyściejsze ... – back2dos

+0

Starałem się unikać stwierdzenia, że ​​wiele dziedziczenia jest dobre lub złe :) Podkreślono tylko, że jeśli masz implementację właściwości w tych "interfejsach", to wymaga to mechanizmu podobnego do dziedziczenia wielokrotnego, gdy kompilator znajdzie 2 interfejsy o tej samej właściwości zdefiniowanej. – Vlagged

Powiązane problemy