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

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
tjekner
Sędziwy Jeż
Sędziwy Jeż
Posty: 93
Rejestracja: 04 mar 2012, 00:52
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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?
Awatar użytkownika
ilu2112
Sędziwy Jeż
Sędziwy Jeż
Posty: 35
Rejestracja: 28 lut 2009, 20:31
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Łódź
Kontakt:

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

Post 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ć?
tjekner
Sędziwy Jeż
Sędziwy Jeż
Posty: 93
Rejestracja: 04 mar 2012, 00:52
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post autor: tjekner »

chyba jestem za cienki na takie rzeczy. Panie szanowny, ja się javy uczę tak na dobre od początku lipca ;p
Awatar użytkownika
Yuri20
Sędziwy Jeż
Sędziwy Jeż
Posty: 49
Rejestracja: 31 maja 2009, 13:35
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: KDE Plasma
Architektura: x86_64

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

Post 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 :)
Awatar użytkownika
ilu2112
Sędziwy Jeż
Sędziwy Jeż
Posty: 35
Rejestracja: 28 lut 2009, 20:31
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Łódź
Kontakt:

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

Post autor: ilu2112 »

Tylko że przy refleksji tak jak pisałem - po drodze zmienisz rodzaj dostępu do metody, ale tylko 'na chwilę' ;)
tjekner
Sędziwy Jeż
Sędziwy Jeż
Posty: 93
Rejestracja: 04 mar 2012, 00:52
Płeć: Mężczyzna
Wersja Ubuntu: 12.10
Środowisko graficzne: GNOME
Architektura: x86_64
Kontakt:

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

Post 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
Awatar użytkownika
ilu2112
Sędziwy Jeż
Sędziwy Jeż
Posty: 35
Rejestracja: 28 lut 2009, 20:31
Płeć: Mężczyzna
Wersja Ubuntu: 12.04
Środowisko graficzne: GNOME
Architektura: x86
Lokalizacja: Łódź
Kontakt:

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

Post 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ą ;)
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 9 gości