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.

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