Problem z dziedziczeniem klas w java i wywołanie w main

0

Witam, nie znam dobrze Javy lecz mam książki i czytam o dziedziczeniu. Dziedziczenie dobrze zrobiłem ale problem polega przy zwracaniu w main imienia, który dałem pod String imie.
Gdzie tu błąd zrobiłem?
Podam oddzielnie dwa kody aby można to zrozumieć.
Z main:

 
package bileteria;

public class Main {

    public static void main(String[] args) {
       Osoba p = new Osoba("Radek");
       *String imie = p.pobierzImie();
       System.out.println(imie);
       *System.out.println(p.pobierzImie());
    }

}
// gdzie gwiazda to błąd pokazany w NetBeans

klasa Osoba;

 
package bileteria;


public class Osoba {
    String imie;
    public Osoba (String imie)
    {
        this.imie = imie;
        
    }
    public void pobierzImie()
    {
      * return this.imie = imie;
// gdzie gwiazda to błąd pokazany w NetBeans
    }

    

}


Chcę to zrobić z void bo mam do zrobienia program a to to tylko do ćwiczeń i zrozumienia. Proszę o pomoc (w sensie nie wykonania za mnie, a wytłumaczenie co źle i poprawienie fragmentu kodu).

0

A jakie błędy pokazuje?
W pobierzImie() masz coś dziwnego: return this.imie = imie. Tutaj powinno być return this.imie po prostu.

0

public void pobierzImie() ta metoda zwraca void. Nie ma być czasem String? ;)

0

Napiszę tak, chciałbym aby po podaniu imienia zwracało Imię w konsoli, czyli jak w System.out.println ("Maciej") to w konsoli jest wywoływany Maciej, o to mi chodzi. Może macie zastrzeżenia co do void, ale chce aby z void to działało bo mam program do napisania na podstawie diagramu klas.

Błąd jaki jest przy public void pobierzImie to: cannot return a value from method whose results type is void

1
Hatezit napisał(a)

Może macie zastrzeżenia co do void, ale chce aby z void to działało bo mam program do napisania na podstawie diagramu klas.

Błąd jaki jest przy public void pobierzImie to: cannot return a value from method whose results type is void

Diagram klas definiuje void pobierzImie? To zmień diagram klas. Jak sobie przetłumaczysz błąd, albo zajrzysz do jakiejkolwiek książki do Javy (a także C, C++, C# itp) to przeczytasz, że funkcja z typem zwracanym void nie zwraca po prostu niczego. Można to obejść, tylko po co?

1

Może macie zastrzeżenia co do void, ale chce aby z void to działało bo mam program do napisania na podstawie diagramu klas
No, to znaczy, że masz zły diagram klas :) Jak chcesz, żeby działało w taki sposób:

String imie = p.pobierzImie();

to musisz zmienić deklarację funkcji zwracającej imię na:

public String pobierzImie()
0

Typ void wiem, że jest typem zwracanym ale chyba sam sobie utrudniam, bo z diagram klas, który wygenerowałem każdy public jest z void czyli metody są z void. A można zrobić aby metoda tak działała własnie z tym Void? Czy mam darować sobie void w metodach?

0

Próbujesz rozwiązać nieistniejący w realnym świecie problem, który sam sobie stworzyłeś na potrzeby tego wątku. void używa się tylko wtedy, gdy metoda nic nie zwraca, w przeciwnym razie trzeba podać konkretny typ zwracany przez metodę, w tym przypadku String.
Nie używaj w ogóle diagramów klas, skoro masz problemy z podstawami programowania.

0

Ja po tym przeziębieniu nie umiem czytać, wy mi piszecie jasno, tłumaczycie a ja czepiam się void jak .... wolę nie pisać. Nie potrzebnie wygenerowałem kod w starUML bo tylko sobie utrudniłem.

0

Chciałem teraz aby Imie i Nazwisko wywołało i teraz ciągle w main, linijkę Osoba p = new Osoba("Radek"); podkreśla.
Daje kod:

 
public class Main {

    public static void main(String[] args) {
       Osoba p = new Osoba("Radek");
       String imie = p.pobierzDane();
       String Nazwisko = p.pobierzDane();
       System.out.println(imie);
       System.out.println(Nazwisko);
       
       
       
    }

}


a tu drugi:

 
public class Osoba {
    String imie;
    String Nazwisko;
    public Osoba (String imie, String Nazwisko)
    {
        this.imie = imie;
        this.Nazwisko = Nazwisko;
        
    }

    
    public String pobierzDane()
    {
       return this.imie + this.Nazwisko;

    }


}

Pytanie czy String dwa razy może być wywoływany? Bo w main linijka pierwsza, mówi mi o konstruktorze, że tam jest błąd.

1

To Twój pierwszy program w życiu?

public class Main {
 
    public static void main(String[] args) {
       Osoba p = new Osoba("Radek","Stepanek"); //konstruktor wymaga dwóch parametrów
       String imie = p.pobierzImie();
       String nazwisko = p.pobierzNazwisko();
       System.out.println(imie);
       System.out.println(nazwisko);
 
    } 
}
public class Osoba {
    String imie;
    String Nazwisko;
    public Osoba (String imie, String Nazwisko)
    {
        this.imie = imie;
        this.Nazwisko = Nazwisko;
 
    }
 
 
    public String pobierzImie()
    {
       return this.imie;
 
    }
    public String pobierzNazwisko()
    {
       return this.Nazwisko;
 
    }
}
0

Po co te niepotrzebne thisy w metodach? W CA to nic niespotykanego, ale po co tak zaciemniać kod w normalnej sytuacji?

0

Definiujesz jedyny konstruktor tak:

public Osoba (String imie, String Nazwisko)

po czym próbujesz wywołać konstruktor tak:

Osoba p = new Osoba("Radek");

I wyrażasz zdziwienie:

Bo w main linijka pierwsza, mówi mi o konstruktorze, że tam jest błąd.

Nie wierzę, że tak może się zachować ktoś, kto już samodzielnie napisał jakiś program.

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