Java-Dostęp do zmiennych klasy podrzędnej i jej metod.

0

Witam. Problem opisany w kodzie programu, nigdzie nie znalazłem rozwiązania. Klasa klasa_z_klasami_podrzedmymi jest tablicą obiektów w klasie tuJestMain.



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package TEST;

/**
 *
 * @author Zbigniew
 */
public class tuJestMain {
    
    klasa_z_klasami_podrzednymi[] klasa = new klasa_z_klasami_podrzednymi[10];//tablica obiektów
    
    public static void main(String args[]){
        tuJestMain myMain = new tuJestMain();
        for(int i=0;i<10;i++) myMain.klasa[i] = new klasa_z_klasami_podrzednymi();//inicjalizacja obiektów
        myMain.klasa[0].zmienna2 = "coś";
        myMain.klasa[1].zmienna2 = "coś";
        System.out.println(myMain.klasa[0].zmienna2);//działa
        System.out.println(myMain.klasa[1].zmienna2);//działa, ma wartość null
        System.out.println("Wolne " + myMain.szukajPustegoString());
        myMain.klasa[1].zmienna2 = null;
        System.out.println("Wolne " + myMain.szukajPustegoString());
        
        /* Jak dostać się do klasa_z_klasami_podrzednymi -> klasaPodrzedna -> zmienna 3? 
        Jak się dostaćdo metody klasaPodrzedna? */
    }
    
    
    
  
    //przeszukuje obiekty do napotkania pustej znienna2
    private int szukajPustegoString () {
        int i = 0;
        do {    i=i+1;
        }  while(klasa[i].zmienna2 != null);
        return i;
    }
    
}

Plik klasa_z_klasami_podrzednymi



/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package TEST;

/**
 *
 * @author Zbigniew
 */
public class klasa_z_klasami_podrzednymi {
    
    
    
    int zmienna1;
    String zmienna2;
    
    
    public klasa_z_klasami_podrzednymi(int zmienna1, String zmienna2) { //jak z tuJestMain uruchomić ten konstruktor?
        this.zmienna1 = zmienna1;
        this.zmienna2 = zmienna2;
    }
    
    public klasa_z_klasami_podrzednymi(){} //do inicjalizacji obiektów bez argumentów
    
    
    class klasaPodrzedna extends klasa_z_klasami_podrzednymi { //jak z tuJestMain uruchomić ten konstruktor?
        float zmienna3;
        public klasaPodrzedna(int zmienna1, String zmienna2, float zmienna3) {
            super(zmienna1, zmienna2);
            this.zmienna3 = zmienna3;
        }
    }
    
    public void jakisProgram() {}
    
}

2

Rozumiem, że to nie jest oryginalny kod który nie działa tylko przykład który miał zaprezentować Twój problem w prostszej formie? Powiem Ci, że wyszło zupełnie odwrotnie (chociaż boje się spytać jak wygląda w takim razie oryginalny kod).

Gubię się w nazwach obiektów, klas, a nawet zmiennych które potworzyłeś. Tak trudno znaleźć prosty reprezentatywny przykład i nazwać wszystko po angielsku z odpowiednim systemem notacji?

Co do kodu...

tuJestMain myMain = new tuJestMain();

-wywołane w metodzie main, wewnątrz klasy tuJestMain.... :D ? Rozumiesz co Ty w ogóle robisz? Jesteś w klasie tuJestMain i w jednej z metod tej klasy tworzysz nowy obiekt tejże klasy ?

-gettery/settery? Czy olać enkapsulację i robisz wszystko public?

-/* Jak dostać się do klasa_z_klasami_podrzednymi -> klasaPodrzedna -> zmienna 3?
Jak się dostaćdo metody klasaPodrzedna? */

public class PrimaryClass {
    private SecondaryClass secondaryClass;
    
    public PrimaryClass(String variable){
        this.secondaryClass = new SecondaryClass();
        secondaryClass.setSomeVariable(variable);
    }
    public SecondaryClass getSecondaryClass() {
        return secondaryClass;
    }
     class InnerClass {
        public InnerClass(){

        }
    }
}

public class SecondaryClass {
    private String someVariable;

    public void setSomeVariable(String someVariable){
        this.someVariable = someVariable;
    }
    public String getSomeVariable(){
        return this.someVariable;
    }
}
public static void main(String args[]) {
        PrimaryClass primaryClass = new PrimaryClass("hello");
        System.out.println(primaryClass.getSecondaryClass().getSomeVariable());
    }

-//jak z tuJestMain uruchomić ten konstruktor?

int x = 5;
int y = 3;
SomeClass someObject = new SomeClass(x, y);

jak z tuJestMain uruchomić ten konstruktor?

PrimaryClass.InnerClass innerClass = new PrimaryClass("heello").new InnerClass();

Dałem swoje przykłady bo aż mnie oczy palce bolą od używania w kodzie polskich nazw, itp, możesz sobie to przeanalizować i analogicznie zrobić u siebie.

0

Dzięki wielkie, już rozumiem.

tuJestMain myMain = new tuJestMain();
To, żeby ze statycznej metody main móc sterować obiektami klasie tuJestMain (non-static variable cannot be referenced from a static context). No sorry, że po polsku, jestem na 1 roku studiów. To miał być tylko przykład, oczywiście działający.

0

No ale angielskiego chyba uczyłeś się wcześniej?

Co do tego dostępu do tej zmiennej - możesz po prostu ją zadeklarować w klasie tuJestMain jako statyczna. Lepiej jednak jest wszystko realizować w innych klasach a w klasie tuJestMain zostawić jedynie metodę main a w niej jedynie wejście do programu przykładowo

public class Main {
    public static void main(String args[]){
        EntryClass entryClass = new EntryClass();
    }
}

I całą resztę logiki zacząć implementować w klasie EntryClass i dalej.

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