interne classen extern benutzen

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hi,
ich habe eine in einem Projekt eine main class. Diese benutze ich jedoch nur um eine weitere aufzurufen (arbeitsklasse). In dieser arbeitsklasse habe ich mir ein "interne" class (speicherklasse) gebaut um hier schöner einige werte zu speichern. Nun möchte ich habe gerne aus der mainklasse mir ein object dieser speicherklasse bauen um hier auf die darin gespeicherten werte zuzugreifen. Leider Klappt dies nicht so besonders toll.
Um alles zu verdeutlichen hier mal ein Schema.

--- Mainklasse---
Code:
public class main{

    public static void main()
    {
        arbeitsklasse arbeit = new arbeitsklasse();
        arbeit.vieleFunktionen(); //funkt wunderbar.

        speicherklasse speicher = new speicherklasse();
        int willHaben = speicher.wissen; // funktioniert nicht.
    }
}

---arbeitsklasse + speicherklasse----
Code:
public class arbeitsklasse
{
    
    public vieleFunktionen()
    {
        speicherklasse speicher = new speicherklasse();      
        speicher.wissen = 3;
       ...
    }

    class speicherklasse
    {
        private int wissen;

        public int setWissen(int wissen)
        {
            this.wissen = wissen;
        }
       public int getWissen()
      {
            return wissen;
        }   
   }
}

Java (Ecclipse) versucht zwar die Klasse speicherklasse einzubinden scharft es aber nicht. Schätze mal das ich die klasse speicherklasse auf irgendeinen status setzen muss, damit ich auch von auserhalb der arbeitsklasse wirklichen zugriff darauf habe.
 

The_S

Top Contributor
1.) Klassennamen schreibt man groß
2.) Deine Speicherklasse sollte public sein, wenn du sie von außen verwenden willst
3.) speicherklasse speicher = new arbeit.speicherklasse()
 
S

schnee

Gast
Die instanzierung muss so erfolgen:

Code:
arbeitsklasse.speicherklasse speicher = arbeit.new speicherklasse();
 
G

Guest

Gast
public hatte ich sie schon gemacht (hatt es nur in meinem beispiel vergessen)

die methode
Code:
arbeitsklasse.speicherklasse speicher = arbeit.new speicherklasse();
funktioniert :)

@x.l
ich benutze den unterschied
wissen = 3;
und setWissen(3); um hier schön zu steuern was ich von außen (aus der mainfunktion) sehen kann. Einige der Daten die ich in meiner speicherklasse speichere sind "nur" arbeitswerte, die von außen nicht sehbar sein sollen. Diese setze ich ebenfalls auf private und lasse den getter und setter weg.
 

The_S

Top Contributor
upps, hatte ich bei mir doch glatt noch einmal das arbeitsklasse vergessen :oops: . Deine Erklärung zu den Gettern und Settern ist mir aber nicht ganz schlüssig ???:L
 
G

Guest

Gast
ok, versuche mal meine überlegungen dahinter zu erklären. Vielleicht belehrt ihr mich ja eines besseren :)

zum einen mag ich es lieber die variante
speicherklasse.wissen = 3;
da somit das wissen blau hinterlegt ist und zudem die werte auch leider wiederzufinden sind im code als wenn da steht
speicherklasse.setWissen(3);

Da ich mal davon ausgehe, das es innerhlab der arbeitsklasse an sich von der gültigkeit nicht so wichtig ist was ich benutze fand ich es der übersichtlichkeit halber recht gut.

Zum anderen ist halt zb. die rechnung
speicherklasse.wissen++;
schneller und meiner ansicht auch schöner als

speicherklasse.setWissen(speicherklasse.getWissen() + 1);

zuletzt gibt es noch folgenden Grund.

Ich habe in meiner speicherklasse zwei "arten" von variablen. Variablen die ich nur brauche um intern (also in meiner arbeitsklasse) zu rechnen oder um mir da was zu merken und dann noch variablem die ich nach oben also zur mainklasse weitereichen möchte.

Variablen die nur innerhalb der arbeitsklasse benutzbar sein sollen setze ich "nur"

Code:
    public class speicherklasse 
    { 
        private int wissen;    
   }

Variablen die auch aus meiner mainklasse zu sehen sein sollen setze ich klassich

Code:
    public class speicherklasse 
    { 
        private int wissen; 

        public int setWissen(int wissen) 
        { 
            this.wissen = wissen; 
        } 
       public int getWissen() 
      { 
            return wissen; 
        }    
   }

Das sind so die drei Gründe warum ich solche Konstrukte wie speicherklasse.wissen = 3, habe.

Was denkt irh darüber? Nachvollziehbar oder "seltsammes" denken eines anfängers???
 
G

Guest

Gast
die interne variable hätte ich lieber

Code:
 public class speicherklasse 
    { 
        private int internesWissen;    
   }

nennen sollen, damit es nicht zu missverständnissen kommt.
 

FArt

Top Contributor
Nur als Zusatz: die interne Klasse muss nicht public sein, wenn sie nur über ihren gültigen Scope instanziiert wird und dann z.B. über ein öffentliches Interface nach außen gegeben wird.
 

FArt

Top Contributor
Frage:
Wenn die innere Klasse einen public-Konstruktor besitzt und öffentliche Methoden wie z.B. Getter/Setter auf ihre Attribute, welche Daseinsberechtigung hat sie dann überhaupt als innere Klasse?
 
G

Guest

Gast
@FArt: Die Frage an mich?
Wenn ja, dann halt weil nicht alle Variablen einen getter und setter haben sollen.
 

tfa

Top Contributor
Wieviele Objekte dieser inneren Klasse wird es pro (äußerem) Objekt geben? Nur eins?
Muss es wirklich eine innere Klasse sein, oder reicht eine statische nested Class?
 

HoaX

Top Contributor
Dass sie nur im zusammenspiel mit einer Instanz der Hauptklasse erstellt werden kann. Die Frage wird sicherlich dann interessant wenn die innere Klasse zusätzlich noch statisch wäre.
 
G

Guest

Gast
Klasse das diese kleine diskussion aufkahm :)
So kann ich später auch selber viel besser argumentieren warum ich was wie gemacht habe.

Also fasse ich mal zusammen.

meine speicherklasse ist eine interne Klasse der Arbeitsklasse aus verschiedenen Gründen.
Zum einem.
Es macht nur sinn sich eine object speicherklasse zu erzeugen, wenn ich ebenfalls ein objekt arbeitsklasse habe. Ein speicherklasse objekt alleine macht absolut keinen sinn.

Von Außerhalb soll es nur möglich sein, einige Variablen zu lesen. Es soll nicht erlaubt sein, diese auch zu setzen. Alles was die arbeitsklasse braucht wir beim start der entsprechenden public funktion mitgegeben und danach von einer private funktion in die speicherklasse geschrieben.

Da ich aber natürlich innerhalb der arbeitsklasse werte in die speicherklasse schreiben muss mache ich dies direkt mit dem speicherklasse.wissen = 3; und nicht mit einer setter.

Somit kann ich sichergehen, das ich nur da werte verändere wo ich es machen will. Wichtig, da die arbeitsklasse + einige andere, später als Bibliothek benutzt werden soll.

Sollte doch jetzt alles klar sein, oder?
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
N Methoden HashMap interne Werte miteinander vergleichen Java Basics - Anfänger-Themen 7
X Betriebssytem interne Consolen Commands über Java starten Java Basics - Anfänger-Themen 2
M Interne Klasse Zugriff Java Basics - Anfänger-Themen 10
C Java Classen ordnen Java Basics - Anfänger-Themen 4
A Import anderer Classen aus anderen Projekten Java Basics - Anfänger-Themen 6
MiMa Aufteilen in Classen Java Basics - Anfänger-Themen 5
S Richtlinien wie man Classen in Packages organisieren soll? Java Basics - Anfänger-Themen 3
M zugang zu anderen classen und Jframes Java Basics - Anfänger-Themen 3
D arraydaten zwischen classen übertragen Java Basics - Anfänger-Themen 8
H2SO3- sichtbarkeit con classen und functionen Java Basics - Anfänger-Themen 8
H2SO3- weggabel für classen Java Basics - Anfänger-Themen 13
W Auf mehrere Classen zugreifen Java Basics - Anfänger-Themen 5
Q Frage zu Classen und Objektenerzeugung Java Basics - Anfänger-Themen 4
M "Partial" classen Java Basics - Anfänger-Themen 25
J Notwendige Classen ins JAR packen? Java Basics - Anfänger-Themen 7
T classen auslagern Java Basics - Anfänger-Themen 16
L In metoden/classen aufteilen (weniger im main) Java Basics - Anfänger-Themen 17
E extern Datei von meinem Computer aufmachen Java Basics - Anfänger-Themen 5
S Klassen Applet extern aufrufen Java Basics - Anfänger-Themen 1
P Datei extern öffnen Java Basics - Anfänger-Themen 0
Y Objekte "extern" bearbeiten Java Basics - Anfänger-Themen 3
X Klasse extern starten Java Basics - Anfänger-Themen 4
B Daten extern speichern? Java Basics - Anfänger-Themen 3
pun Thread "extern" beenden Java Basics - Anfänger-Themen 4
S Java Programm extern laufen lassen Java Basics - Anfänger-Themen 10
G Windows 98SE/Extern Programm aufrufen Java Basics - Anfänger-Themen 4
G Objekte extern speichern und wieder einlesen Java Basics - Anfänger-Themen 2
N eclipse extern nutzen? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben