• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

konstruktor w klasie dziedziczącej

0 głosów
986 wizyt
pytanie zadane 10 marca 2016 w Java przez piekarnik Użytkownik (720 p.)
Otóż mam taki problem, mam klasę Trójkąt, gdzie konstruktor pobiera 3 argumenty typu punkt, a w tej klasie jakieś metody, jakieś tam pola. Tworzę klasę TrójkątRównoboczny, która ma mieć takie same metody i pola, ale konstruktor musi być dwuargumentowy - trzeci punkt do obliczenia.

Jak to zrobić? Wyskakuje mi błąd, że muszę użyć przy konstruktorze super(), ale w klasie Trójkąt mam tylko konstruktor 3-argumentowy.

2 odpowiedzi

+1 głos
odpowiedź 10 marca 2016 przez Javowiec Pasjonat (21,560 p.)
wybrane 10 marca 2016 przez piekarnik
 
Najlepsza

To zadeklaruj też konstruktor bezargumentowy, np.:

public Trójkąt() {}

Jeżeli zdefiniowałeś w jakiejś klasie konstruktor n-argumentowy, to bezargumentowego kompilator za Ciebie już nie stworzy.

A podklasa w konstruktorze zawsze domyślnie (niejawnie) wywołuje konstruktor bezargumentowy nadklasy, chyba, że wybierzesz jawnie jakiś inny.

komentarz 10 marca 2016 przez piekarnik Użytkownik (720 p.)

Dzięki, a teraz jak zdefiniować konstruktor 

public class Trojkat {
	private Punkt[] punkty = new Punkt[3];
	
	public Trojkat () {}

...
}

public class Trojkatrown extends Trojkat {
	
	public Trojkatrown (Punkt a, Punkt b) {
		super();
		punkty[0]=a;
		punkty[1]=b;
		Punkt c = new Punkt(1,1);
		punkty[2]=c;
	}

....
}

Mam takie klasy jak wyżej i nie mogę przypisać obiektów w klasie TrojkatRownoboczny do pól dziedziczonych z klasy Trojkat.

Jak rozwiązać ten problem?

1
komentarz 10 marca 2016 przez Javowiec Pasjonat (21,560 p.)
Ale pól prywatnych się nie dziedziczy w Javie. Dziedziczysz tylko zachowanie (metody) obiektu.

Dorób sobie gettery/settery do pola i ich używaj albo oznacz pole słowem protected zamiast private. Wtedy będziesz miał do niego bezpośredni dostęp.

W ramach ciekawostki dodam, że konstrukcja super.metoda() lub super.zmienna daje dostęp do metod i zmiennych nadklasy.
komentarz 10 marca 2016 przez piekarnik Użytkownik (720 p.)
Właśnie zrobiłem na getach/setach, czyli rozumiem, że jakbym ustawił w klasie nadrzędnej pola protected to w klasie podrzędnej będą private? Wtedy mam dostęp z klasy podrzędnej do tych pól?

To co mam teraz to tworząc obiekt klasy podrzędnej, tworzę obiekt klasy nadrzędnej, ale mogę coś do niego dodać w klasie podrzędnej i przesłonić metody?

Proszę o odpowiedź, czy dobrze myślę, bo to rozwieje moje wątpliwości.
1
komentarz 10 marca 2016 przez Javowiec Pasjonat (21,560 p.)
Jeżeli w klasie nadrzędnej masz pola oznaczone słowem kluczowym protected, to te pola są dostępne w podklasach nadklasy i w klasach będących w tym samym pakiecie co nadklasa (nie muszą być jej podklasą - wystarczy, że są w tym samym pakiecie). Z tego względu lepsze jest podejście oznaczania pól słowem private i dostarczenie getterów/setterów (hermetyzacja - dziedziczymy tylko metody).

Adekwatnie jest z prywatną metodą - podklasa jej nie dziedziczy.

Klasa podrzędna jest rozszerzoną wersją klasy nadrzędnej. Przykładowo Cieżarówka (podklasa) jest Samochodem (nadklasa). Samochód jest bardziej ogólny, zaś Ciężarówka jest samochodem, który ma dodatkowo przyczepę.
0 głosów
odpowiedź 10 marca 2016 przez piotrsz109 Stary wyjadacz (13,730 p.)
Zrób taki jak wymaga kompilator lecz dodaj drugi dwu argumentowy.
komentarz 10 marca 2016 przez piekarnik Użytkownik (720 p.)
problem jest taki, że nie mogę się dostać do wektora Punkt[] punkty w klasie pochodnej.
Dlaczego tak jest?
komentarz 16 kwietnia 2017 przez piotrsz109 Stary wyjadacz (13,730 p.)
Sprawdź czy zmienna jest publiczna/chroniona. Jeśli nie zmień to.

Podobne pytania

0 głosów
1 odpowiedź 1,639 wizyt
0 głosów
1 odpowiedź 443 wizyt
0 głosów
2 odpowiedzi 1,395 wizyt

93,774 zapytań

142,731 odpowiedzi

323,383 komentarzy

63,378 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...