Java - interfejsy

0

Witam!
Problem chyba błahy, otóż...
Pierwsza klasa - interfejs:public interface Developer {
//String imie="";
// String nazwisko = new String();
public void procesRealizacjiZadania(Date data);

}

Druga klasa implementuje ten interfejs:

public class Programmer implements Developer{
String imie, nazwisko;

public Programmer(String imie2, String nazwisko2){
    imie=imie2;
    nazwisko=nazwisko2;
}

public void procesRealizacjiZadania(Date data) {
    data = new Date(110, 0, 1);
    System.out.println("Data "+data.toString());
}

}

Trzecia klasa - użycie drugiej klasy :) czyli coś w stylu:

Developer pracownik = new Programmer("imie", "nazwisko");

 i tutaj na spokojnie mogę się potem odnosić do pracownik.imie; itp... 
Ale co w przypadku, gdy mam listę pracowników postaci:

ArrayList<Developer> teamsList = new ArrayList<Developer>();

 i chcę z niej wyłuskać np.
` teamsList.get(2).imie` a nie mam takiej możliwości, bo ów imienia nie widać :( wrzucając pola imię i nazwisko do interfejsu nic nie zyskam, bo tam muszę je zadeklarować, a późniejsze zmiany w kolejnych klasach nie będą widoczne przy deklaracji:
` Developer pracownik = new Programmer("imie", "nazwisko");`... i teraz wybierając pracownik.imie wyswietla mi się to, co przypisalem tam w interfejsie, a nie to, co dałem przy inicjalizacji tego... :( pomóżcie...
0
Marek-KTW napisał(a)

Trzecia klasa - użycie drugiej klasy :) czyli coś w stylu:
Developer pracownik = new Programmer("imie", "nazwisko");

 i tutaj na spokojnie mogę się potem odnosić do pracownik.imie; itp...

Jestes pewien ze mozesz? Mi sie wydaje ze nie, skoro masz referencje do Developer, a ten nie zna pol imie i nazwisko, tak mozesz sie odwolywac tylko jak masz referencje na Programmer, a i to tylko dlatego ze jestes prawdopodobnie w tym samym pakiecie.

Zmienne w interfejsach sa zawsze final static, zatem jak je dodasz do Developer, to one zawsze beda mialy wartosci z interfejsu, jak zauwazyles. Wynika to z tego ze pola oraz metody statyczne maja wczesne wiazanie podczas komilacji, a nie jak metody niestatyczne, polimorficzne wywolania.
0

Jeżeli musi to zrobić za pomocą interfejsów, to zadeklaruj w interfejsie Developer metodę getImie() i zaimplementuj ją w Programmerze.

Należy zadać jednak pytanie, czy takie dziedziczenie ma sens. Moim zdaniem nie. Programmer to nie jest typ Developera. A jeżeli nawet chcesz, aby tak było, to zdecydowanie lepiej zrobić klasę abstrakcyjną Developer niż interfejs i w klasie Developer umieścić imię.

0
Marek-KTW napisał(a)

Pierwsza klasa - interfejs:public interface Developer {
//String imie="";
// String nazwisko = new String();
public void procesRealizacjiZadania(Date data);

}

> Druga klasa implementuje ten interfejs:
> <code>public class Programmer implements Developer{
String imie, nazwisko;

    public Programmer(String imie2, String nazwisko2){
        imie=imie2;
        nazwisko=nazwisko2;
    }

    public void procesRealizacjiZadania(Date data) {
        data = new Date(110, 0, 1);
        System.out.println("Data "+data.toString());
    }
}

Z zaproponowanej struktury dziedziczenia wynika, ze projektant moze nosic imie/nazwisko tylko wtedy, gdy jest programista. Natomiast kolejna kwestia to: bycie programista nie implikuje bycia projektantem i odwrotnie.

1 użytkowników online, w tym zalogowanych: 0, gości: 1