Dziedziczenie i kontenery

0

Witam, mam program, w którym jest klasa Kontrolka, po której dziedziczą klasy CzujnikTemperatury i CzujnikRuchu. Klasy te rozszerzają się o nowe metody. Mam klasę grupa, w której mam kontener przechowujący Kontrolki.:

public class Grupa { 
	
	/** nazwa grupy */
	private String nazwaGrupy;
	/** kontener przechowujacy kontrolki */
	ArrayList<Kontrolka> kontrolki = new ArrayList<Kontrolka>();
	/** kontener przechowujacy zdarzenia */
	ArrayList<Zdarzenie> zdarzenia = new ArrayList<Zdarzenie>();
	/** kontener przechowujacy kontrolki */
	ArrayList<Wykonywalny> wykonywalne = new ArrayList<Wykonywalny>(); 
}

W klasie głównej programu stworzyłem grupę i dodałem do niej kontrolkę CzujnikTemperatury:

public class ZarzadzanieBudynkiem {


	public static void main(String[] args) {
		
		Swiat s = new Swiat();
		Grupa g = new Grupa("1 pietro");
		g.kontrolki.add(new CzujnikTemperatury("Czujnik temp 1 pietro", 10, 25));	
	}
	
} 

I mam problem bo nie wiem w jaki sposób dobrać się do metod klasy CzujnikTemperatury. Przykładowo próbuje tak:

g.kontrolki.get(0).; 

Ale pozwala mi to tylko wywołać metody klasy Kontrolka a nie mam dodatkowych metod zadeklarowanych w klasie CzujnikTemperatury. Jak je wywołać?

1

Musisz rzutować obiekt na odpowiedni typ(CzujnikTemperatury).

0

@olek1 jeśli musisz tak robić to znaczy że trochę minąłeś się z polimorfizmem. Jeśli absolutnie jest taka konieczność, to użyj najpierw instanceof żeby sprawdzić czy wolno ci tak rzutować.

0
Shalom napisał(a):

@olek1 jeśli musisz tak robić to znaczy że trochę minąłeś się z polimorfizmem. Jeśli absolutnie jest taka konieczność, to użyj najpierw instanceof żeby sprawdzić czy wolno ci tak rzutować.

Czyli jak mam klasę kontrolka i po niej dziedziczą 3 inne klasy to lepiej zrobić tak:

public class Grupa { 
 
        private String nazwaGrupy;

        ArrayList<Kontrolka1> kontrolkadziedzicza1 = new ArrayList<Kontrolka1>();
        ArrayList<Kontrolka2> kontrolkadziedzicza2 = new ArrayList<Kontrolka2>();
        ArrayList<Kontrolka3> kontrolkadziedzicza3 = new ArrayList<Kontrolka3>();
} 

niż:

public class Grupa { 
	

	private String nazwaGrupy;

	ArrayList<Kontrolka> kontrolki = new ArrayList<Kontrolka>();
} 

Po prostu dla każdej dziedziczącej osobny kontener, a nie jeden wspólny, który ma typ klasy bazowej?

0

Nie nie nie. Lepiej tak to zaprojektować żeby nie trzeba było korzystać z nowych metod po prostu, tak żeby działał polimorfizm. Ale jeśli się nie da, to pozostaje ci zabawa w instanceof albo osobne listy.

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