ArrayList dziedziczenie w osobnych klasach w języku java

0

Witam,
Na początku powiem, że szukałem odpowiedzi w necie, i nie bardzo to mi pomogło, także w dokumentacji. W książkach poczytałem o dziedziczeniu i o ArrayList jednak mimo, że błąd pokazuje mi w klasie Obsługa_klienta, to stworzyłem konstruktor i nie działa. Podam kod trzech klas.

  1. klasa Lot
package Main;


 public class Lot {
     

	public String Cel_lotu;
	public String Godzina_wylotu;
        int IloscMiejsc;
        String DodajLot;
        String Bilet;
        int liczba;
//      Lot (){
//          String Bilet;
//      }
      
	public void CzyWolny(){
           
	}
	
	public void rezerwujBilet() {
	
	}
	
	public void anuluj() {
	
	}
	
	
	
	 public void IloscZarezerMiejsc() {
	   int zarezerwowaneMiejsca = 50;
           System.out.println("Ilość zarezerwowanych miejsc to: "+zarezerwowaneMiejsca);
	}
	
	public void IloscWolnychMiejsc() {
            int miejscaWolne = 200;
            System.out.println("Ilość wolnych miejsc to: "+miejscaWolne);
	}

        public void ZwrotBiletu(){
            int zwroconoBiletow = 20;
            System.out.println("Biletów zwrócono: "+zwroconoBiletow);
        }

        public String getBilet(){return Bilet;}
        public int getIloscMiejsc(){return liczba;};
}

 

2.Klasa Obsługa_klienta

 
package Main;
import java.util.ArrayList;


  class Obsluga_Klienta extends Osoba {
       private ArrayList<Lot> DodajLot = new ArrayList<Lot>();
	public void Sprzedaz_lotu() {
	
	}


	public void DodajNowyLot(String Bilet, int liczba ) {
	   //DodajLot.add(new Lot(Bilet));
	   //tu pokazuje błąd że nie ma w klasie Lot  konstruktora
	}
	
	public void AnulowanieRezerwacji() {
	
	}
	
	public void UsunLot() {
	
	}
}

I ostatnia klasa main

 

package Main;


public class Main
{
   public static void main(String[] args) {
      Osoba k = new Osoba();
      k.Imie = "Radek";
      System.out.println("Imię: "+k.Imie);
      k.Nazwisko = "Matowski";
      System.out.println("Nazwisko: "+k.Nazwisko);
    
      System.out.println("-----------------Dane lotu------------------------");
      Lot t = new Lot();
      t.Cel_lotu ="Hiszpania";
      System.out.println("Cel lotu :"+t.Cel_lotu);
      t.Godzina_wylotu = "17:30";
      System.out.println("Godzina odlotu :"+t.Godzina_wylotu);

      Lot lm = new Lot();
      lm.IloscZarezerMiejsc();
      lm.IloscWolnychMiejsc();
      lm.ZwrotBiletu();

      Obsluga_Klienta klient = new Obsluga_Klienta();
      klient.DodajNowyLot("Czechy" , 2);
      System.out.print("dane lotu to: ");

    }

}


Pytanie gdzie błąd zrobiłem?

0

Mamy zgadywać jaki błąd dostajesz i jak wygląda klasa Osoba?

0

new Lot(bilet) nie jest poprawne, bo nie ma w klasie Lot konstruktora który przyjmuje parametr String. Konstruktor to prawie jak zwykła metoda, jej niezwykłość polega tylko na tym, że jest obowiązkowa, obowiązkowo wywoływana przy tworzeniu obiektu i musi kaskadowo wywoływać super(cokolwiek), explictie albo implicite (implicte ma postać zawsze super()). A więc składnia tejże funkcji, czyli konstruktora jest prawie typowa, tutaj byłoby to np:
public Lot(String bilet) {
this.bilet = bilet;
}

0

Widzę , że od razu -1 za co? Początkujący jestem i to dlatego? Dobra,faktycznie klasy osoby nie dałem więc podam poniżej:

package Main;
import java.util.ArrayList;


public class Osoba {
	String Imie;
	String Nazwisko;
        private ArrayList<Lot> Bilet = new ArrayList<Lot>();

	public void WyszukajLot(String Bilet) {
	 
	}
	
	public void RezerwacjaLotu() {
	  
	}
	
	public void AnulowanieLotu() {
	
	}

        public void ZwrotBiletu(){

        }
}

 

Co to konstruktora to tworzyłem z parametrami jak kolega podał ale w tedy w klasie lot inne metody (3 ostatnie) miały błąd a taki błąd, że nie działało (nie pamiętam jakie to błędy były). Ale dzięki, spróbuję to napisać.

Napisałem taką klasę lot i pojawia się błąd:

 
Exception in thread "main" java.lang.RuntimeException: Uncompilable source code - cannot find symbol
  symbol:   constructor Lot()
  location: class Main.Lot

Mam pytanie, ponieważ klasa Lot nie dziedziczy z żadnej klasy, gdybym nie do lotu a do klasy osoba tak zrobił, to dobrze by było? Chodzi mi o to że zamiast w ArrayList<Lot> miał być <osoba> i tam zmienne String Bilet i int lot?

0

Żeby poprawić błąd, trzeba wpierw przeczytać komunikat kompilatora lub JRE, a potem go zrozumieć. Dopisywanie (skreślanie) losowych znaków jest metodą zawodną.

0

Jak ty to w ogóle kompilujesz i odpalasz? Jeśli kompilujesz sobie klasy pojedynczo to ci kompilator nie wyłapie błędów, które powstaną w innych klasach. Jeżeli klasa startowa A korzysta z klasy B, a ty zmienisz sobie klasę B, np wyrzucisz konstruktory jakieś, potem skompilujesz B i odpalisz A to ci wyskoczy oczywiście błąd "uncompilable source". Użyj jakiegoś IDE, np NetBeans.

0

Wibowit, ja korzystam z NetBeans w wersji 7.01. Przeważnie sam chce dojść co i jak działa, a jak nie działa to korzystam z wszelkich źródeł, teraz niestety z korzystałem i niewiele mi to pomogło. A piszę w grupie program na zaliczenie a druga osoba z grupy nic nie pisze a udaje że coś robi. Ale to mnie nie tłumaczy, dlatego zapytałem tutaj. Mam 5 klas nie które tu podałem z dziedziczeniem. Z drugiej strony to co napisałem w metodach w klasie Lot za komentuję, i jeszcze za komentuję w main, tworząc konstruktor Lot, i zobaczę czy działać będzie ArrayList. Staram sie zrobić sam niż pytać na forum ale jak nie wiem to zrozum mnie i nie dziw się, że zadaję pytania, które są wg.ciebie nie na miejscu.

P.S. Od razu poprzedzę twoje pytanie co wielu mi tu zadaje: Nie, nie zamierzam być w przyszłości programistą java (lecz nauka we własnym zakresie), a być programistą innych języków webowych:)

1

Ale przecież pojęcie konstruktora nie jest jakąś szczególną cechą Javy. Konstruktory są w C++, Scali, C#, Pythonie itd chyba każdym innym szeroko używanym obiektowym języku.

Podstawowa sprawa w Javie jest taka:

  1. Jeżeli w klasie nie ma podanego explicite żadnego konstruktora to kompilator Javy dodaje domyślny (implicite) konstruktor typu:
    public NazwaKlasy() {
    super();
    }
  2. Jeżeli w klasie jest jakiś podany explicite konstruktor to domyślny nie jest już dodawany.
  3. W Javie pierwszą metodą w każdym konstruktorze jest wywołanie:
    super(cośtam)
    Wywołuje to konstruktor z klasy nadrzędnej z podanymi parametrami. Jeżeli w konstruktorze nie ma explicite podanego wywołania super(cośtam) na początku to kompilator dodaje domyślne (implicite) wywołanie super() (czyli bez parametrów).
  4. Java ma modyfikatory widoczności: public, protected, package (domyślny, implicite zakładany przez kompilator jeśli nie podasz żadnego innego), private - w kolejności od najbardziej widocznego, do najmniej widocznego.
  5. Jeśli konstruktor jest private to instancję klasy można utworzyć tylko i wyłącznie w jakiejś metodzie (np statycznej) tej klasy.
  6. Explicite i implicite to jawny i niejawny.

Jeśli masz jakieś błędy typu uncompilable to w NetBeansie odpal Clean & Build, wtedy dostaniesz full zestaw błędów, a nie jakieś nie wiadomo co. I jeśli piszesz w Javie to podstawy pasuje znać. Poczytaj jakiś tutorial o Javie albo coś, bo jak będziesz pytał o pierdoły na forum to ci zejdzie 10x dłużej.

0

Wibowit ale rozpisałeś się ale nie mam problemów z tworzeniem konstruktorów, ewentualnie popełniam błędy ;)
Ok. Postanowiłem od zera stworzyć te 5 klas, stworzyłem konstruktor Lot w klasie lot, użyłem ArrayList i działa.
Moim minusem jest to, że wygenerowałem diagram ze StarUML i czasem działało lub nie. Więc postanowiłem od zera i wszystko gra:)

0

Jak nie masz problemów z konstruktorami skoro poleciał błąd o konstruktorze?

W ogóle w Javie zapis:
Lot() {
String bilet; <= chodzi dokładnie o tę linijkę
}
nie ma najmniejszego sensu, bo ten konstruktor nic nie robi.

0

Pytasz skąd poleciał błąd w konstruktorze, to odpowiem tobie tak, jak nam wykładowca od laborek na bazach. Jeżeli nie przeczytasz dobrze treści błędu a tylko klikasz jak małpa i strzelasz to oznacza, że jesteś nie douczony lub nie zapoznałeś się dobrze z podstawami czyli w tym przypadku dobrze nie przeczytałem o konstruktorach a pobieżnie.

Nie mam już takiego konstruktora co w Lot(){String = bilet;} , inaczej to napisałem:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1