Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[Java] Jak stworzyć wewnętrzną klasę?

kadu 27 Maj 2010 16:17 1721 2
  • #1 27 Maj 2010 16:17
    kadu
    Poziom 10  

    Code:
    class Czlowiek{
    
       boolean plec=false; //false - kobieta, true - mężczyzna
       int wiek=0;
       String imie;
       static int ilosc_ludzi=1;
       Czlowiek(boolean plec,int wiek,String imie){
          this.plec=plec;
          this.wiek=wiek;
          this.imie=imie;
          ilosc_ludzi++;
          if(this.plec==false)
             System.out.println(this.imie+" ma "+this.wiek+" i to kobieta.");
          else
             System.out.println(this.imie+" ma "+this.wiek+" i to mężczyzna.");
       }
    }
    public class Program{
       class Zwierz{
          String nazwa;
       }
       public static void main(String args[]){
          
          Czlowiek ludek=new Czlowiek(false,35,"Iza");
          System.out.println("Liczba populacji: "+ludek.ilosc_ludzi);
          Czlowiek ludek2=new Czlowiek(true,18,"Ryszard");
          System.out.println("Liczba populacji: "+ludek.ilosc_ludzi);
          
          Zwierz slon=new Zwierz(); //tu mi kompilator wskazuje, że jest źle
          slon.nazwa="słoń";
          System.out.println("Mamy też jedno zwierzę: "+slon.nazwa);
          
       }
    }


    Co trzeba powyżej zmodyfikować, aby dało się skompilować? Jak wyciągam definicję klasy Zwierz na zewnątrz to jest ok, ale aktualnie uczę się Javy i chciałbym się dowiedzieć jak się robi klasy wewnętrzne. Jakby kto mógł pozmieniać kod powyżej dzięki czemu mógłbym zobaczyć jak sie robi klasę wewnętrzną, to byłbym wdzięczny.

    0 2
  • #2 27 Maj 2010 16:48
    pallid
    Poziom 20  

    Zastanow sie. (podpowiedz: jak odwolujesz sie do innych elementow klasy).

    0
  • #3 27 Maj 2010 21:00
    McMonster
    Poziom 32  

    Zorientowałem się, że właściwie nie wiem, jaka jest odpowiedź, więc ciekawość nakazłą mi sprawdzić i rozwiązanie podam. Generalnie rozwiązaniem problemu jest:

    Code:
    Program.Zwierz slon = new Program.Zwierz();


    ale jedynie pod warunkiem zadeklarowania klasy Zwierz jako statyczną:

    Code:
    static class Zwierz
    
    {
       String nazwa;
    }


    Chyba, że Zwierz byłby tworzony w niestatycznej metodzie (czyli tworzony prze instancję klasy Program, a nie przez metodę statyczną main() samej klasy), to wtedy zostawiamy deklarację klasy Zwierz tak, jak podałeś i robimy:

    Code:
    Program.Zwierz slon = Program.new Zwierz();


    Informacja zaczerpnięta z tej strony.

    0