2009-07-23 26 views
5

In Actionscript 3 kann ich in Interfaces keine vars deklarieren. Ich verstehe es nicht. Ich weiß, dass ich das umgehen kann, indem ich Getter und Setter definiere, aber was ist, wenn ich nur eine einfache öffentliche Eigenschaft haben möchte? Normalerweise verwende ich Getter und Setter, wenn es etwas zu tun gibt, wenn ich eine Eigenschaft setze oder bekomme, aber was ist, wenn ich nur einen Wert speichern möchte?Warum Eigenschaften in Interfaces nicht deklarierbar sind

Antwort

0

Ich bin nicht eine Actioscript-Programmierung, aber Schnittstellen (in Java zum Beispiel) sind dazu bestimmt, Verhalten nicht Staat zu definieren, so Intrerefaces in Jave einfach Methoden deklarieren, die die Klasse die Implementierung der Schnittstelle definieren muss. Eigenschaften (oder Instanzvariable) sind im Allgemeinen nicht erforderlich, um Verhalten zu definieren, und in Schnittstellen sind sie nicht erlaubt.

+0

Eigenschaften sind nicht die gleichen wie Instanzvariablen. –

+1

+1 auf das ... im Prinzip ... weil dies nicht wirklich für AS3 gültig ist ... gibt es einen Unterschied zwischen Eigenschaften (von Accessoren bereitgestellt) und Variablen ... von außen ist dies völlig transparent, IDENTISCH auf syntaktischer Ebene ... aber effektiv bedeutet der Zugriff auf Eigenschaften einen Aufruf und Variablenzugriff nicht ... Interfaces können Property-Accessoren deklarieren, aber keine Variablen ... das ist nicht 100% ig konsistent oder vernünftig ... aber das ist Leben, denke ich ... :) – back2dos

2

Sie können es so sagen: Schnittstellen existieren, weil Sie in Ihrer Sprache nicht von mehreren abstrakten Basisklassen erben können. Wenn AS3 das erlaubt hätte, hätte es wahrscheinlich keine "Schnittstellen", sondern "reine abstrakte Klassen".

Mit anderen Worten, die Eigenschaften Implementierung in Ihrer Schnittstelle würde zu Namenskonflikten führen und von dort zu anderen Mehrfachvererbungsproblemen (Diamant).

Allerdings sollte nur ein Getter oder ein Setter ohne Implementierung funktionieren.

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

(ich habe nicht die AS3-Compiler zur Hand haben)

+1

Ihre Antwort ist die richtige Lösung ... obwohl ich völlig anderer Meinung bin über das, was Sie über Schnittstellen sagen ... Erbschaft ist von Natur aus schlecht ...: D ... nein, ernsthaft ... der Sinn von Vererbung ist CODE REUSE ... aber normalerweise wird es missbraucht, um zu erreichen, wofür Interfaces entworfen sind: Beschreibung einer Objekt-Rolle ... goldene Regel: Klassen definieren Implementierung, Interfaces-Verhalten ... verwenden keine Klassen, um Verhalten zu verlangen ... schreibe nicht someMethod (somePa ram: SomeClass), schreibe someMethod (someParam: SomeInterface) ... das ist viel flexibler/erweiterbar und sauberer ... – back2dos

+0

Ich habe versucht, eine Aussage über Mehrfachvererbung zu vermeiden, die gut oder schlecht ist :) Nur darauf hingewiesen, dass Wenn Sie die Eigenschaftenimplementierung in diesen "Schnittstellen" haben, würde dies einen Mechanismus erfordern, der der Mehrfachvererbung ähnelt, wenn der Compiler zwei Schnittstellen mit derselben definierten Eigenschaft findet. – Vlagged

Verwandte Themen