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

konstruktor w klasie dziedziczącej

VPS Starter Arubacloud
0 głosów
533 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,087 wizyt
0 głosów
1 odpowiedź 201 wizyt
0 głosów
2 odpowiedzi 914 wizyt

92,453 zapytań

141,262 odpowiedzi

319,088 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...