Jak wywołać metodę, która nie jest abstrakcyjna?

0

Witam. Mam przykładowo klasę Item, z której dziedziczą klasy: Book oraz Audiobook. W innej klasie mam kontener "Item itemsTab", który przechowuje dziedziczące od Item obiekty klas Book oraz Audiobook. Jak teraz odwołać się za pomocą obiektu tego kontenera do metody, która jest w klasie np. Book, ale nie ma jej w Audiobook? Dla przykładu:

Wektor: itemsTab

Klasa Item:
abstract void print();

Klasa Book:
void print();
void doIt();

Klasa Audiobook:
void print();
void other();

Do metody print - nie ma problemy, odwołam się za pomocą itemsTab.get(i).print(). Gdy spróbuję jednak odwołać się za pomocą itemsTab.get(i).doIt(); (wiedząc, że dany obiekt jest na pewno książką) - "The method doIt() is undefined for the type Item"

Jak sobie z tym poradzić w Javie? W CPP zrobiłbym to po prostu za pomocą: ((Book*)itemsTab[i]) -> doIt();

1

W Javie musisz zrobić to samo, a taka czynność nazywa się downcasting (chociaż zastanów się, czy nie masz gdzieś skopanego designu).

0

Dzięki, poczytałem i faktycznie to jest to o co mi chodzi :D Teraz tylko pytanie jak tego użyć?
Jak pisałem mam wektor itemsTab:

	private Vector <Item> itemsTab = new Vector <Item>();

Oraz na podstawie danych z katalogów w plikach tekstowych wczytuję do wektora w taki sposób:

 itemsTab.add(new Book (id,category,title,year,publisher,authorName,authorSName,pages,free));
 itemsTab.add(new Audiobook (id,category,title,year,publisher,authorName,authorSName,lenght,free));

No i pytanie - jak do całego wektora obiektów typu Item zapakować owe obiekty Book i Audiobook, by można było się nimi odwoływać do poszczególnych metod w nich zawartych? Nie byłoby problemu w przypadku jednego obiektu, wtedy z tego co przeczytałem zrobiłbym po prostu:

Item item = new Book();
Book book = (Book) item;

Przepraszam jak co za moją nie wiedzę, bo zapewne problem jest banalny, ale jestem mocno początkujący i mam taki problem, że robię projekt na studia i nie mam czasu na "spokojną" naukę z dobrą książką, tylko muszę jak najszybciej przepisać projekt z CPP :/

1
Book book = (Book) itemsTab.get(i);

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