Strona 1 z 1

Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 21 lip 2012, 22:00
autor: tjekner
Witam,

Piszę program symulujący ligi piłkarskie. Napisałem klasę "statystyki", po której dziedziczy klasa "druzyna". Jestem w trakcie pisania klasy "liga". Klasa drużyna definiuje własną metodę "mecz". Klasa liga również ją definiuje i chciałbym, żeby tylko metoda mecz z klasy liga mogła wywoływać metodę mecz z klasy druzyna. Nie posługuję się dziedziczeniem i modyfikatorem dostępu "protected", ponieważ modyfikator ten daje słabsze zabezpieczenia niż w c++, a poza tym liga nie rozszerza tylko jednej drużyny. Zawiera tablicę drużyn. Jest jakiś sposób implementacji tego?

Re: Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 23 lip 2012, 21:04
autor: ilu2112
Po pierwsze - postaraj się pisać bardziej zrozumiale.

Z tego co zrozumiałem - chcesz udostępnić metodę prywatną na zewnątrz obiektu. Krótka odpowiedź: nie da się. Możesz kombinować jak łysy koń po górę, ale wszelkie zapędy sprowadzą się do upublicznienia. Może stwórz schemat UML swoich 3 klas, zaznacz dokładnie co chcesz osiągnąć i pomyślimy co z tym zrobić?

Re: Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 23 lip 2012, 22:24
autor: tjekner
chyba jestem za cienki na takie rzeczy. Panie szanowny, ja się javy uczę tak na dobre od początku lipca ;p

Re: Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 23 lip 2012, 22:50
autor: Yuri20
Jest to możliwe, żeby użyć metody prywatnej na zewnątrz. Należy korzystać z tzw. "refleksji" klas (hint: przyda się klasa Method, której obiekty reprezentują metody). Twoja hierarchia dziedziczenia wydaje mi się trochę nieprzemyślana. Spróbuj to jakoś lepiej uporządkować to może nie będziesz musiał korzystać z refleksji.

EDIT:

Aha, uczysz się od lipca. Tym bardziej odradzam refleksje :)

Re: Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 23 lip 2012, 23:13
autor: ilu2112
Tylko że przy refleksji tak jak pisałem - po drodze zmienisz rodzaj dostępu do metody, ale tylko 'na chwilę' ;)

Re: Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 23 lip 2012, 23:20
autor: tjekner
Czytałem o refleksji, ale średnio to zrozumiałem... Książka, z której się uczę nie jest za dobra. Jakbym dobrze nie znał c i c++, to bym nie miał szans na zrozumienie tej lektury. Jest masa niedopowiedzeń, masa rzeczy, które nie zostały zademonstrowane na przykładzie, a tylko o nich wspomniano i niektóre zawierają błędy... A tak btw mam teraz problem, bo wyskakuje mi błąd:
unreported exception java.io.FileNotFoundException; must be caught or declared to be thrown

Mój program wygląda tak: jest klasa "statystyki". Po niej dziedziczy klasa ""druzyna". Klasa "liga" zawiera tablice druzyn. A na samej górze jest klasa "bukmacherzy", która zawiera tablice lig. One wszystkie działają bez szans na jakikolwiek błąd, przetestowałem je na wszystkie możliwości jako "doświadczony" programista programów konsolowych w c i c++ ;p.

Teraz piszę klase ramka dziedziczącą po JFrame. Ona zawiera obiekt klasy bukmacherzy. Mam życzenie wczytać z pliku dane na temat lig w konstruktorze klasy "ramka". Podeklarowałem "throws FileNotFoundException" przy każdej metodzie używającej metod klasy "bukmacherzy" wczytaj() lub zapisz() i nic nie pomogło. A że w mojej książce oczywiście nie jest to zademonstrowane - proszę, pomóżcie ;p

Re: Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia

: 24 lip 2012, 07:46
autor: ilu2112
Wyjątek ten jest najczęściej rzucany gdy próbujesz się otworzyć jakiś strumień/reader'a na podstawie pliku, czyli np.:

Kod: Zaznacz cały

FileReader reader = new FileReader("mojPlik.txt");
Sprawdź dokładnie cały kod, gdzieś musisz mieć wywołanie metody, która może wyrzucić taki wyjątek. Wyjątki tego typu w Javie muszą być jawnie obsłużone przez blok try-catch-finally lub poprzez deklarację throws, która to zrzuca obowiązek obsługi wyjątku na zewnątrz danej metody. Przy kompilacji powinieneś mieć napisane w którym miejscu kodu coś się nie zgadza, więc nie musisz przelecieć całego kodu z lupą ;)