Zmiana atrybutu lista w klasie rozszerzanej

0

Witam mam oto taki problem, chcę aby lista która jest atrybutem obiektu zmieniła klasę przechowywanych obiektów w klasie która będzie rozszerzać, kod poniżej.

public class Plik {
    public List<Slowo> lista;
}

public class PlikZTekstem extends Plik {
    public  List<WordFromBook> lista;
}

dodatkowo klasa wordfrombook rozszerza klasę Slowo. Z góry dzieki zapomoc

1

Nie musisz zmieniać typu na WordFromBook, żeby moc je dodać.

0

Po pierwsze atrybuty nie powinny być public.
Po drugie:

public class Plik {

    private List<? extends Slowo> lista;
}

Taki zapis daje Ci to, ze w Liście w klasie Słowo Plik możesz mieć obiekty Slowo i wszystkie obiekty, które po nim dziedziczą.

0
Black007 napisał(a):

Po pierwsze atrybuty nie powinny być public.
Po drugie:

public class Plik {

    private List<? extends Slowo> lista;
}

Taki zapis daje Ci to, ze w Liście w klasie Słowo Plik możesz mieć obiekty Slowo i wszystkie obiekty, które po nim dziedziczą.

Teraz nie mogę dodać obiektu Slowo do tej listy, kompilator pokazuje mi błąd

0
Black007 napisał(a):
public class Plik {

    private List<? extends Slowo> lista;
}

Taki zapis daje Ci to, ze w Liście w klasie Słowo Plik możesz mieć obiekty Slowo i wszystkie obiekty, które po nim dziedziczą.

List<Slowo> lista wystarczy, żeby wkładać elementy, które mogą dziedziczyć po słowie. To co napisałeś daje Ci to, że lista będzię kowariantna. W tym wypadku raczej tak średnio przydatne.

Co do tematu, możesz dodać generyczny parameter do Plik, jeżeli z jakiegoś powodu potrzebujesz dokładny typ, i zrobić na przykład tak.

class Plik<T extends Slowo> {
  List<T> lista;
}

Potem korzystać z tej klasy w ten sposób.

Plik<Slowo> plikZeSlowami = new Plik<>();
Plik<WordFromBook> plikZeSlowamiZKsiazki = new Plik<>();

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