Wie rufe ich einen Konstruktor in in einer anderen Klasse auf, der einen private Array verwendet? (Java)?

5 Antworten

Schreibe doch Getter- und Setter-Methoden für deine Klasse Test, um die Eigenschaften bzw. Parameter deiner Test-Klasse zu "exposen".

z.B. so ungefähr:

public int[] getSoGehts() {

return this.sogehts;

}

public setSoGehts(int[] value) {

this.sogehts = value;

}

Der Aufruf in deiner zweiten Klasse Test1, könnte dann so aussehen:

public class Test1 {

private int[] arrayFromTestClass;

public Test1() {

testObj = new Test(["1", "2", "3", "10"]);

this.arrayFromTestClass = testObj.getSoGehts(); /* Schreibt den Wert von deinem Array aus der Test-Klasse in den Parameter "arrayFromTestClass"  deiner Test1-Klasse */

testObj.setSoGehts(["123", "456", "789"]); /* Mit der Set-Methode aus deiner Test-Klasse kannst du auch Werte in dein Array von Klasse Test1  schreiben, obwohl private gesetzt wurde */
}

}

ACHTUNG! Ich bin kein Java Entwickler und kenne die Syntax von Java NICHT!

Nach diesem Prinzip (siehe oben) kannst du auf die privaten Eigenschaften der Klasse Test zugreifen.

Du könntest aber auch zum Beispiel durch Polymorphie ("Vererbung") den Konstruktor von deiner vererbenden Test-Klasse mit super() aufrufen und einen Wert übergeben, sodass dieser in deinem Integer-Array allokiert wird. Das hast du ja im Konstruktor von deiner Klasse implementiert.

Dazu muss deine Test1-Klasse von der Test-Klasse erben, Stichwort: "extends".

Das mag jetzt alles vielleicht ein wenig kompliziert klingen, ist es aber tatsächlich nicht. Es braucht Zeit bis du es verstehst und gib bitte nicht auf, die Entwicklergemeinde braucht neue Leute!

Woher ich das weiß:Berufserfahrung

Wieso sollte das nicht gehen? Das Array hat doch nichts damit zu tun, wie du den Konstruktor aufrufst.

Woher ich das weiß:Hobby – Ich programmiere in meiner Freizeit mit Java.

du machst eine public function die den wert rausgiebt und eine public function die es verändern kann .

der sinn soll sein das werte niemals direkt verändert werden etc sondern immer über eine funktion die z.b. vorher prüft ob der wert erlaubt ist, ob überhaupt was angezeigt werden darf . das nennt sich kapselung , werte die privat sind , sollen gar nicht direkt angesprochen werden , die klasse oder die funktion die sie haben , kümmen sich um ihre werte .

du greifst ja auchnciht einfach in ein fremdes potimonai , sondern du fragst den besitzer wieviel geld er hat und wenn er das nicht sagen will oder dir nix geben will , dann läuft die welt richtig . ansonsten läuft was falsch, den diebe gibts halt überall .

zweitens ist so sichergestellt das du z.b. nicht mehr geld entnehmen kannst als überhaupt im portmonai sind , oder du soviel geld ins portemonai packst was gar nicht rein passt. wenn du nur platz für 32 münzen hast, kannste nicht einfach 64 rein tun . wenn ud es könntest wäre das nicht die funktion des portemonains, sondern z.b. eine schachtel die unendlich groß ist .

der sin einer privaten variable ist nun mal das sie von aussen gar nicht beachtet werden darf , sondern immer über eine public function organisisert wird , diese public function regelt die interaktion mit der aussenwelt .

das ist der sinn bei OOP . das objekt (klasse) kümmert sich ums sich selber was interne werte angeht . den nur die klasse selber weiss was erlaubt ist und was verboten ist , wo die grenzen sind etc .

sonst muss du ja z.b. überall im code wo von aussen zugegriffen wird, das alles anpassen , nur weil einiges halt nicht erlaubt ist .

das ist die logik der getter und setter .

somit kannst du auch intern etwas ändern ohne das es auswirkungen auf alle externen hat , wenn du meinst ein int reicht intern nicht aus machste daraus ein double , in der funktion die den zugriff regelt kannst du dann anpassen , aber alle externen objekte können weiter arbeiten wie immer , weil die halt gar nichts mit dem internen wert zu tun haben .

das mag alles umständlich klingen , hilft deinem objekt aber nicht arm zu werden ;) oder werte anzunehmen die gar nicht angenommen werden dürfen .

ein fahrstuhl mit 4 stockwerken kann nun mal nicht in den 5 stock fahren .

deswegen gibts auch eine funktion die einem anzeigt wieviele stockwerke dieser fahrstuhl fahren kann , oder beim objekt motor , ist klar vorgeben wie viel benzin er brauch bzw verbraucht bei welcher geschwindigkeit . das regelt das objekt motor und nicht das objekt tank :) und ein elektromotor fährt mit strom und nicht mit benzin der sich für strom ausgiebt ;)

Private Attribute sind nur innerhalb der Instanz oder Klasse verfügbar. Rufst du also den Konstruktor auf, darf der Konstruktor auf das private Attribut zugreifen. Andere Instanzmethoden dürfen das auch, allerdings dürfen andere Objekte das nicht. In dem Fall musst du das Attribut über eine öffentliche Methode zugänglich machen, was man als Getter und Setter bezeichnet.

Gar nicht, du musst ihn public machen. Wenn er private ist, dann ist der nur in der selben Klasse verfügbar

uqdhui 
Fragesteller
 29.10.2021, 17:37

Das sollen wir aber nicht, also er soll private sein und wir sollen drauf zugreifen

0
FaTech  29.10.2021, 17:41
@uqdhui

Dann musst du eine Public Methode machen, die auf den private Array zugreift

private int[] sogehts;

public int[] Test(int[] parameter = null)
{
  if(parameter != null)
  {
    sogehts=parameter;
  }
  return sogehts;
}

0