2016-05-26 11 views
0

Ich versuche, einen Kalender mit Aktivitäten gekoppelt zu implementieren, zum Beispiel: enter image description hereErstellen eine Aktivität Kalender in java

Ich wurde von zwei abstrakten Klassen zu denken, wäre das erste Gruppenkalender so aussehen:

public abstract class GroupCalendar { 

HashMap<TimeFrame, Activity> entries = new HashMap<TimeFrame, Activity>(); 

public abstract void addActivity(TimeFrame t, Activity a); 

public abstract void removeActivity(TimeFrame t, Activity a); 

public abstract void findActivity(TimeFrame t); 

public abstract void printAll(); 
} 

und die zweite würde Aktivitätsklasse sein:

public abstract class Activity extends GroupCalendar { 

private String name, location; 

public Activity() { 
} 

public Activity(String name, String location) { 
    this.name = name; 
    this.location = location; 
} 

public abstract String getName(); 

public abstract void setName(String name); 

public abstract String getLocation(); 

public abstract void setLocation(String location); 
} 

Danach gäbe es die konkreten Klassen sein, die A verlängern ctivity:

public class Sport extends Activity { 

private String name, location; 
private boolean outdoors; 

public Sport(String name, String location, boolean outdoors) { 


    this.name = name; 
    this.location = location; 
    this.outdoors = outdoors; 
} 

@Override 
public void addActivity(TimeFrame t, Activity a) { 
} 

@Override 
public void removeActivity(TimeFrame t, Activity a) { 
} 

@Override 
public void findActivity(TimeFrame t) { 
} 

@Override 
public void printAll() { 
} 
} 

Das Problem ist, dass ich nicht richtig eine Aktivität hinzufügen kann, wenn ich versuche, einen Sport hinzuzufügen, alles, was ich bekommen ist der Name und die Lage, nicht im Freien. Wenn mir jemand Hinweise geben könnte, was mit meiner Herangehensweise nicht stimmt, würde das mir viel bedeuten.

+0

Dies ist zu weit gefasst und es gibt sehr wenig Text, der etwas erklärt, was ein Hinweis darauf sein könnte, dass Sie nicht genug Arbeit darin investiert haben. Wie auch immer, ein Ort, der für diese Art von Fragen besser geeignet ist, ist [Programmierer] (http://programmers.stackexchange.com/), dort nach meinem vorherigen Ratschlag. – dabadaba

+0

Können Sie das Beispiel teilen, wie Sie es verwenden, um das Problem hervorzuheben? – erkfel

Antwort

1

Ich sehe nicht, warum ActivityGroupCalendar erweitern sollte, gibt es keine Eltern/Kind-Beziehung zwischen ihnen.

Wenn Sie outdoors bekommen wollen, erstellen Sie einfach einen Getter dafür in Sport.

Was wahrscheinlich Ihr Lehrer Sie wollen, ist eine Methode print in Activity, so dass jede Unterklasse es entsprechend implementieren müsste; zum Beispiel würde Sportname + location + outdoor drucken. Dann würden Sie in der Lage sein a.print() zu nennen, wo a ein Activity

+0

Ich habe versucht und wenn ich es in einer Methode wie a.getOutdoors() verwende, wo ein Activity-Objekt ist, erhalte ich einen Fehler. – user3848412

+0

Natürlich hat 'Activity' nicht' getOutdoors() ', Sie müssen' Activity' in 'Sport' umwandeln, um diese Methode aufzurufen –

1

Zuerst ist, ich bin nicht sicher, warum Sie abstrakte Klassen für diese verwenden möchten?

Zweitens besteht Ihr Kalender aus Aktivitäten, eine Aktivität sollte nicht die Qualitäten eines Kalenders besitzen. Eine einzelne Aktivität muss eine Sammlung anderer Zeitrahmen und Aktivitäten enthalten, sofern die Aktivitäten nicht aus anderen Aktivitäten bestehen.

Ich hätte eine konkrete GroupCalendar Klasse mit einer konkreten Activity Klasse und, falls erforderlich, überschreiben Activity Methoden in Unterklassen. Die Klasse Activity sollte das Zugreifen auf und das Ändern von Activity-Membern übernehmen, die Sie nicht für jede Unterklasse von Activity überschreiben möchten.

Auf einem anderen Hinweis hat Activity einen überladenen Konstruktor, der name und location dauert. Daher sollten Sie in Ihrem Sport Klasse überladenen Konstruktor einen Aufruf an super(name, location) vornehmen und die nicht benötigten Zuordnungen entfernen.

Verwandte Themen