2009-03-04 10 views
0

Warum kann ich nicht den statischen Typ der Methoden in der Schnittstelle angeben.Objektorientierte Analyse und Design

Gibt es eine Alternative dazu?

aber ich sollte nur inerface der abstrakten Klasse verwenden.

/

Gibt es irgendein Problem acess Spezifizierer in der Schnittstelle in specifing?

Ich möchte die Ereignisse in Interface angeben, und das sollte nur von implementierten Klasse zugegriffen werden, so dass ich geschützten Access-Bezeichner für dieses Ereignis möchte.

und ich habe bestimmte Funktion, die Schnittstelle in einer anderen Klasse verwenden kann, in diesem Fall kann ich Public Access-Spezifizierer verwenden.

+0

Siehe auch http://stackoverflow.com/questions/512877/why-cant-i-define-a-static-method-in-a-java-interface – VonC

Antwort

2

Ich weiß nicht, welche Sprache Sie nehmen, aber ich werde antworten, als ob in C#.

Warum kann ich nicht den statischen Typ von Methoden in der Schnittstelle angeben. Gibt es eine Alternative dazu?

Es ist, weil Sie statische Methoden nicht überschreiben können. Was versuchen Sie zu erreichen?

Mitglieder in Schnittstellen sind in C# immer öffentlich. Wenn Sie andere Schutzstufen benötigen, verwenden Sie eine abstrakte Klasse. Was wäre der Zweck von geschützten Ereignissen, wenn Sie nicht über die Schnittstelle darauf zugreifen können? Es hat dann nichts mit der Schnittstelle zu tun (bedenken Sie, dass die Schnittstelle keinen Code haben kann). Wenn Sie darauf verweisen, dass nur implementierende Klassen die Ereignisse auslösen können, seien Sie versichert, dass sie die einzigen sind, die sie auslösen können. Ereignisse werden auf diese Weise erstellt - nur die Klasse selbst kann Ereignisse auslösen. Sie können ein Ereignis außerhalb der Klasse nicht auslösen (außer wenn Sie eine Methode für die Klasse haben und das Ereignis auslösen).

1

Schnittstellen beschreiben Ihren Implementierer nur für die Öffentlichkeit. Der einzige Zugriffsmodifikator für eine Schnittstelle ist "intern" auf der Schnittstelle selbst, was sie zu einer Schnittstelle macht, die nur für alle Mitglieder der gleichen Baugruppe sichtbar ist oder die mit dem Attribut "InternalsVisibleTo" bekannt gemacht werden.

Wenn nur Implementierer ein bestimmtes Ereignis sehen sollten, müsste dieses Ereignis in irgendeiner Art von Basisklasse sein.

Eine statische Methode ist ein Rest der prozeduralen Programmierung. Sie haben ihren Nutzen (siehe z. B. Erweiterungsmethoden), haben aber wirklich nicht viel mit OOP zu tun.

0

Ich bin auf Verlust, was Sie mit der ersten Frage meinen, aber Ihre zweite Frage über die Verwendung in Schnittstellen geschützt ist ein direktes "Nein". Schnittstellen werden "Schnittstellen" genannt, weil sie die "Schnittstelle" (d. H. Öffentliche Methoden) angeben, mit denen Sie mit diesem Objekt kommunizieren können.

0

Meine Erfahrung mit OOP ist in Bezug auf Actionscript 3, aber ich bin sicher, es ist relativ.

Statische Methoden können nicht überschrieben werden und sie werden nicht verwendet, wenn eine Klasse die Vorgängerklasse erweitert.

Zugriffsmodifikatoren werden in der Schnittstelle nicht verwendet, da die Schnittstelle zum Einrichten von PUBLIC-Methoden verwendet wird.

In AS3 ist eine Schnittstelle lediglich eine Methodensignatur ohne Block, aber einschließlich Datentypen.

Es ist wichtig zu beachten, dass Getter/Setter-Methodensignaturen auch in einer Schnittstelle verwendet werden können. Diese sind nützlich, und wenn Sie nur einen Setter verwenden, haben Sie einen schreibgeschützten öffentlichen Zugriff auf eine private gekapselte Variable erstellt.

Soweit Schnittstelle statt einer abstrakten Klasse, hängt alles davon ab, wie Sie Ihren Code implementieren möchten. Oftmals werden Interface und eine abstrakte Klasse zusammen verwendet, um unterschiedliche Ergebnisse zu erzielen, indem Vererbung und Polymorphie (extends/implements) genutzt werden.