CroQuet Geschrieben 13. November 2007 Geschrieben 13. November 2007 Hi, erstmal sorry für den blöden Titel... Thema ist folgendes: Ich habe eine Klasse die als Super Class für viele andere zur Verfügung steht (als Vereinfachung nehm ich einfach [Auto]) Dieses [Auto] eben vererbt seine Methoden an [bMW] [Mercedes] und [VW]. Nun ist aber in JEDER Subklasse die Mehtode "Blinken" implementiert, was ja falsch ist, da das in Auto gehört (wo es nicht ist) (sinn oder unsinn mal dahingestellt). Jedenfalls suche ich nun einen Weg EINE Klasse hierfür zu verwenden, denn ich kann zwar alle 3 Subklassen in [Auto] laden, habe dann aber keinen Zugriff auf "Blinken" denn die Methode gibts da nicht. (will mir also den Aufwand sparen zwischen [bMW] [Mercedes] und [VW] unterscheiden zu müssen) Die Klassen selbst kann ich nicht ändern, kann mir aber was drum herum bauen... Sprache ist ABAP. Danke schonmal für die zahlreichen Antworten
MAJOR_TOM Geschrieben 13. November 2007 Geschrieben 13. November 2007 Hi CroQuet, implementieren die Subklassen ein gemeinsames Interface? Wenn nicht, sehe ich eigentlich keine Möglichkeit, auf die Unterscheidung zwischen [bMW], [VW] usw. zu verzichten... Handelt es sich um SAP Standardklassen? Wenn ja um welche?
CroQuet Geschrieben 13. November 2007 Autor Geschrieben 13. November 2007 Hi CroQuet, implementieren die Subklassen ein gemeinsames Interface? Wenn nicht, sehe ich eigentlich keine Möglichkeit, auf die Unterscheidung zwischen [bMW], [VW] usw. zu verzichten... Handelt es sich um SAP Standardklassen? Wenn ja um welche? ne, nix Interface geht um: cl_wd_input_field cl_wd_dropdown_by_idx cl_wd_dropdown_by_key . . . die haben alle einen gemeinsamen nenner die Klasse CL_WD_UIELEMENT aber die Mehtode SET_READ_ONLY die ich da bräuchte fehlt... aber vielleicht hab ich ja auch was übersehen :beagolisc
MAJOR_TOM Geschrieben 13. November 2007 Geschrieben 13. November 2007 *----------------------------------------------------------------------* * CLASS cl_drumherum DEFINITION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS cl_drumherum DEFINITION INHERITING FROM cl_wd_uielement. PUBLIC SECTION. METHODS: set_read_only IMPORTING value TYPE abap_bool, init_object IMPORTING i_object TYPE REF TO object."cl_wd_abstract_input_field. PRIVATE SECTION. DATA: m_abstract TYPE REF TO object."cl_wd_abstract_input_field. ENDCLASS. "cl_drumherum DEFINITION *----------------------------------------------------------------------* * CLASS cl_drumherum IMPLEMENTATION *----------------------------------------------------------------------* * *----------------------------------------------------------------------* CLASS cl_drumherum IMPLEMENTATION. METHOD init_object. m_abstract = i_object. ENDMETHOD. "init_object METHOD set_read_only. DATA: method_name TYPE string VALUE 'SET_READ_ONLY'. CALL METHOD m_abstract->(method_name) EXPORTING value = value. ENDMETHOD. "set_read_only ENDCLASS. "cl_drumherum IMPLEMENTATION DATA: cl_input TYPE REF TO cl_wd_input_field, cl_dropdown TYPE REF TO cl_wd_dropdown_by_idx, cl_drum TYPE REF TO cl_drumherum. START-OF-SELECTION. cl_input = cl_wd_input_field=>new_input_field( ). cl_dropdown = cl_wd_dropdown_by_idx=>new_dropdown_by_idx( bind_texts = 'X' ). CREATE OBJECT cl_drum. CALL METHOD cl_drum->init_object( i_object = cl_input ). CALL METHOD cl_drum->set_read_only( value = 'X' ). CALL METHOD cl_drum->init_object( i_object = cl_dropdown ). CALL METHOD cl_drum->set_read_only( value = 'X' ). Ist zwar nicht streng objektorientiert, aber in ABAP sehe ich keine andere Möglichkeit, deine Anforderung zu realisieren. Mann müsste nur noch eine mögliche Exception bei CALL METHOD m_abstract->(method_name) EXPORTING value = value. abfangen.
CroQuet Geschrieben 19. November 2007 Autor Geschrieben 19. November 2007 Also ich habs jetzt nicht so gemacht,sondern mit nem Makro (jaja ich weiß, noch schmutziger ) aber so spar ich am meisten coding mit dem wenigsten Aufwand... Danke für die Wegführung
Empfohlene Beiträge
Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren
Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können
Benutzerkonto erstellen
Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!
Neues Benutzerkonto erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden