[Java] - Dziedziczenie i ekstensje

anika91
Użytkownik
Użytkownik
Posty: 172
Rejestracja: 11 paź 2009, o 19:54
Płeć: Kobieta
Lokalizacja: Gdańsk
Podziękował: 67 razy

[Java] - Dziedziczenie i ekstensje

Post autor: anika91 »

Witam, mam taki układ klas na moim diagramie klas :


W skrócie: (klasa abstrakcyjna "Osoba" , od niej dziedziczą dwie podklasy : "Pracownik" , "Klient" , i od klasy 'Pracownik' dziedziczą kolejne 2 podklasy : "Handlowiec" , "Serwisant" .
Dodatkowo mam klasę ObjectPlus do trzymania ekstensji i klasa Osoba dziedziczy po tej klasie.
Wszystko napisałam tak (oczywiście każda klasa w oddzielnym pliku)

Kod: Zaznacz cały

public abstract class Osoba extends ObjectPlus{
}

public class Pracownik extends Osoba{
}

public class Klient extends Osoba{
}
//pytanie bo nie mam pewności. klasa pracownik zaimplementowana w ten sposob , dziedzicząca po Osoba bedzie tez dziedzicyc tą ObjectPlus i umożliwi zarządzanie ekstensją ?

public class Handlowiec extends Pracownik{ // czy po prostu tak ? :/
}
public class Serwisant extends Pracownik{
}
1. Moje pytanie czy taka implementacja jest właściwa i czy zarówno klasa ''Handlowiec'' jak i ''Pracownik'' będzie miałą dostęp do tej ObjectPlus i wywoła się ten konstruktor zapisujący do listy gdy bede dodawac nowego Pracownika czy Klienta ?

2. Jak ją rozbudować żeby była zachowana trwałość ekstensji ?

jej ciało wygląda tak:

Kod: Zaznacz cały

public class ObjectPlus {

   private static Map<String, List<Object>> ekstensje;
   //mapa by przechowywać wszystkie obiekty
   
   
   public ObjectPlus(){ //konstruktor
      if (ekstensje==null){
         
         ekstensje = new HashMap<String, List<Object>>();
      }
      
      String className = this.getClass().toString();
      List<Object> ekstensja = ekstensje.get(className);
      
      if(ekstensja == null){
         ekstensja = new ArrayList<Object>();
         ekstensje.put(className, ekstensja);
      }
      
      ekstensja.add(this);
   }
   
   
   //ta metoda zwróci nam ekstensje dla danego obiektu 
   public List<Object> getEkstensja(){
      
      String className = this.getClass().toString(); 
      List<Object> list = ekstensje.get(className);
      return list;
   }
   
   
//druga taka sama metoda ale bedzie przyjmowala nazwe klasy, i bedzie dzialac na metodach klasowych
public static List<Object> getEkstensja(String className){
      return ekstensje.get(className);

   }
}
ODPOWIEDZ