Java: czy da się udostępnić pola prywatne obiektów jednej klasy - obiektom innej klasy bez dziedziczenia
-
- 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
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?
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?
- ilu2112
- 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
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ć?
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ć?
-
- 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
chyba jestem za cienki na takie rzeczy. Panie szanowny, ja się javy uczę tak na dobre od początku lipca ;p
- Yuri20
- 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
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
EDIT:
Aha, uczysz się od lipca. Tym bardziej odradzam refleksje

- ilu2112
- 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
Tylko że przy refleksji tak jak pisałem - po drodze zmienisz rodzaj dostępu do metody, ale tylko 'na chwilę' 

-
- 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
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
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
- ilu2112
- 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
Wyjątek ten jest najczęściej rzucany gdy próbujesz się otworzyć jakiś strumień/reader'a na podstawie pliku, czyli np.:
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ą 
Kod: Zaznacz cały
FileReader reader = new FileReader("mojPlik.txt");

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