Referenz und Instanzierung

Java4win

Aktives Mitglied
Hey,
Ich habe irgendwo mal gelesen das es auch möglich ist eine Instanzierung so durchzuführen.

Java:
Auto bmw = new Fahrzeuge();

Ich kannte jedoch bisher nur immer diese Instanzierung:

Java:
Auto bmw = new Auto();

Also wo genau liegt hier der Unterschied und was passiert hier genau ?

Vielen Dank im Voraus.
 

Java4win

Aktives Mitglied
Erkennst du denn selbst irgendeinen Unterschied in den beiden Codebeispielen?
Eventuell wird bei dem
Java:
Auto bmw = new Auto();
nur der Konstruktor der Auto Klasse aufgerufen

und bei

Java:
Auto bmw = new Fahrzeuge();
der Konstruktor von der Klasse Auto und von der Klasse Fahrzeuge ?

Aber kann auch sein das ich komplett falsch liege...
 

Harry Kane

Top Contributor
Java:
Auto bmw = new Fahrzeuge();
funktioniert dann, wenn Auto eine Oberklasse von Fahrzeuge ist. Umgangssprachlich ausgedrückt: wenn jedes Fahrzeuge ein Auto, aber nicht jedes Auto eine Fahrzeuge ist. Wenn der von dir gezeigte Code tatsächlich kompiliert, kann man daraus eine Vererbungshierachie ableiten, die genauso sinnvoll ist wie mein vorangehenden Satz.
 

Java4win

Aktives Mitglied
Jep. Zuerst der von Fahrzeuge, dann der von Auto.
Wird ein Parameterloser Konstruktor aufgerufen von der Klasse Auto ?
Wir haben doch nur dann die Möglichkeit dem Konstruktor der Klasse Fahrzeuge Parameter zu übergeben oder nicht ?

Bearbeitet:
Ich habe mir noch einmal Gedanken gemacht und man könnte doch mit dem Schlüsselwort super in der Klasse Fahrzeuge den Konstruktor aus der Superklasse Parameter über geben oder ?
 
Zuletzt bearbeitet:

Harry Kane

Top Contributor
Wir haben doch nur dann die Möglichkeit dem Konstruktor der Klasse Fahrzeuge Parameter zu übergeben oder nicht ?
Wenn es einen solchen Konstruktor in der Fahrzeug-Klasse gibt.
man könnte doch mit dem Schlüsselwort super in der Klasse Fahrzeuge den Konstruktor aus der Superklasse Parameter über geben
Wenn es einen Konstruktor der Auto-Klasse mit den entsprechenden Parametern gibt, dann ja.
Näheres zum Thema s. https://www.java-forum.org/thema/code-verstaendnis.178367
 
X

Xyz1

Gast
Sollte auch keine Bestrafung sein. ;) Aber wenn der Wissende nicht gerade schläft, fallen ihm "Fehler" auf. ;)
"Zuerst" ist auch nicht der richtige Begriff, wenn Auto noch weitere Oberklassen bis zu Object hat. Weiterhin wie angemerkt ist hier confusing naming, denn idR ist ein Auto ein Fahrzeug (nicht vice versa). Kann aber auch aus einer Prüfung eine "Fangfrage" sein.
 

Meniskusschaden

Top Contributor
Jep. Zuerst wird der Konstruktor der Superklasse aufgerufen, dann erst der Konstruktor der aktuellen Klasse.
Hm, ist das wirklich so? Muß man hier nicht zwischen "aufgerufen werden" und "ausgeführt werden" unterscheiden? Nach meinem Verständnis wird zuerst der Konstruktor der Subklasse aufgerufen. Dort befindet sich als erstes die Anweisung super(); (ggf. nur implizit), die den Konstruktor der Superklasse aufruft. Nachdem der Supertyp-Konstruktor fertig ist, setzt der Subtyp-Konstruktor seine Arbeit fort.

Demnach würde also zuerst der Subtyp-Konstruktor aufgerufen, aber trotzdem zuerst der Supertyp-Konstruktor ausgeführt werden. Ich weiß nicht sicher, ob es sich wirklich so verhält, aber zumindest habe ich es mir immer so erklärt und es erscheint mir plausibel.
 

Harry Kane

Top Contributor
Sodele, als Rehabilitation für mein Geschreibsel weiter oben hier noch was zum Thema:
Das implizite Aufrufen des Superklassen-Konstruktors kann durch einen expliziten Aufrufen eines beliebigen Konstruktors der Superklasse unterbunden werden. Der implizite Aufruf setzt voraus, dass die Superklasse einen parameterlosen Konstruktor hat. Wenn in der Superklasse gar kein Konstruktor definiert ist, wird automatisch ein parameterloser Konstruktor erzeugt (sog. Default-Konstruktor). Sobald ein Konstruktor definiert wird, wird der default-Konstruktor nicht mehr automatisch erzeugt. Wenn aber dennoch durch einen impliziten Superklassen-Konstruktoraufruf aus einer abgeleiteten Klasse ein parameterloser KOnstruktor gefordert ist, muss er extra geschrieben werden.
Das hier kompiliert nicht:
Java:
public class Constructors {

    static class Parent {

        Parent(String text) {
            System.out.println("Parent");
        }
    }

    static class Child extends Parent {

        public Child() {
            //Impliziter Aufruf von super(), schlägt fehl, weil Parent keinen solchen Konstruktor hat
            System.out.println("Child");
        }

    }
}
Das hier kompiliert:
Java:
public class Constructors {

    static class Parent {

        Parent(String text) {
            System.out.println("Parent");
        }
    }

    static class Child extends Parent {

        public Child() {
            //Expliziter Aufruf eines Superklassen-Konstruktors
            super(null);
            System.out.println("Child");
        }

    }
}
und das hier auch.
Ausgabe:
Parent ohne Parameter
Child

Java:
public class Constructors {

    public static void main(String[] args){
        new Child();
    }
    static class Parent {

        Parent(String text) {
            System.out.println("Parent");
        }
        Parent(){
            System.out.println("Parent ohne Parameter");
        }
    }

    static class Child extends Parent {

        public Child() {
            //Impliziter Aufruf des parameterlosen Superklasse-Konstruktors
            System.out.println("Child");
        }

    }
}
 
X

Xyz1

Gast
kann durch einen expliziten Aufrufen eines beliebigen Konstruktors der Superklasse unterbunden werden.
ersetzt werden. Zudem: Wenn kein default Konstruktor gegeben ist, wird man gezwungen, einen der Konstruktors aufzurufen.

Zudem: Von dem Beispiel den Bytecode ansehen, um die Aufruferreihenfolge zu sehen.
 

Meniskusschaden

Top Contributor
Ich habe eines der Beispiele von @Harry Kane mal so abgewandelt:
Java:
public class Constructors {

    static class Parent {
        Parent() {
            System.out.println("Parent");
        }
    }

    static class Child extends Parent {
        public Child() {
            System.out.println("Child");
        }
    }
  
    public static void main(String[] args) {
        new Child();
    }
  
}
Ausgabe:
Code:
Parent
Child
Bytecode der Klasse Constructors:
Code:
// Compiled from Constructors.java (version 1.8 : 52.0, super bit)
public class Constructors {
 
  // Method descriptor #6 ()V
  // Stack: 1, Locals: 1
  public Constructors();
    0  aload_0 [this]
    1  invokespecial java.lang.Object() [8]
    4  return
      Line numbers:
        [pc: 0, line: 2]
      Local variable table:
        [pc: 0, pc: 5] local: this index: 0 type: Constructors
 
  // Method descriptor #15 ([Ljava/lang/String;)V
  // Stack: 1, Locals: 1
  public static void main(java.lang.String[] args);
    0  new Constructors$Child [16]
    3  invokespecial Constructors$Child() [18]
    6  return
      Line numbers:
        [pc: 0, line: 17]
        [pc: 6, line: 18]
      Local variable table:
        [pc: 0, pc: 7] local: args index: 0 type: java.lang.String[]

  Inner classes:
    [inner class info: #16 Constructors$Child, outer class info: #1 Constructors
     inner name: #24 Child, accessflags: 8 static],
    [inner class info: #25 Constructors$Parent, outer class info: #1 Constructors
     inner name: #27 Parent, accessflags: 8 static]
}
Bytecode der Klasse Parent:
Code:
// Compiled from Constructors.java (version 1.8 : 52.0, super bit)
static class Constructors$Parent {
 
  // Method descriptor #6 ()V
  // Stack: 2, Locals: 1
  Constructors$Parent();
     0  aload_0 [this]
     1  invokespecial java.lang.Object() [8]
     4  getstatic java.lang.System.out : java.io.PrintStream [10]
     7  ldc <String "Parent"> [16]
     9  invokevirtual java.io.PrintStream.println(java.lang.String) : void [18]
    12  return
      Line numbers:
        [pc: 0, line: 5]
        [pc: 4, line: 6]
        [pc: 12, line: 7]
      Local variable table:
        [pc: 0, pc: 13] local: this index: 0 type: Constructors.Parent

  Inner classes:
    [inner class info: #1 Constructors$Parent, outer class info: #31 Constructors
     inner name: #17 Parent, accessflags: 8 static]
}
Bytecode der Klasse Child:
Code:
// Compiled from Constructors.java (version 1.8 : 52.0, super bit)
static class Constructors$Child extends Constructors$Parent {
 
  // Method descriptor #6 ()V
  // Stack: 2, Locals: 1
  public Constructors$Child();
     0  aload_0 [this]
     1  invokespecial Constructors$Parent() [8]
     4  getstatic java.lang.System.out : java.io.PrintStream [10]
     7  ldc <String "Child"> [16]
     9  invokevirtual java.io.PrintStream.println(java.lang.String) : void [18]
    12  return
      Line numbers:
        [pc: 0, line: 11]
        [pc: 4, line: 12]
        [pc: 12, line: 13]
      Local variable table:
        [pc: 0, pc: 13] local: this index: 0 type: Constructors.Child

  Inner classes:
    [inner class info: #1 Constructors$Child, outer class info: #31 Constructors
     inner name: #17 Child, accessflags: 8 static],
    [inner class info: #3 Constructors$Parent, outer class info: #31 Constructors
     inner name: #33 Parent, accessflags: 8 static]
}
Der Child-Konstruktor ruft also den Parent-Konstruktor auf, welcher den Object-Konstruktor aufruft.
 
X

Xyz1

Gast
Was meinstn damit? Bzw. Inwiefen enthält dieser Satz zusätzliche Informationen
Ich habe wirklich keine Lust, der Nachredner oder Hampelmann zu sein.

Folgendes kompiliert NICHT:
Java:
class Elter {
    Elter(String string) {

    }
}

class Kind extends Elter {

}

Grund:
Code:
constructor Elter in class Elter cannot be applied to given types;
  required: String
  found: no arguments
... und noch ein bisschen Blabla, der jetzt nur verwirren würde
 
X

Xyz1

Gast
@Meniskusschaden und @Harry Kane : Dann stimmen meine Antworten doch....... aber nur @Harry Kane bekommt Likes....... Ungerecht!

Ich schreibe hier auch nicht alles, denn wir verstehen das ja, der TE versteht es nicht. :confused:

+++ Also es gibt das, was ("zuerst") aufgerufen wird, und es gibt das, was ausgeführt wird. +++
 

Meniskusschaden

Top Contributor
@Meniskusschaden und @Harry Kane : Dann stimmen meine Antworten doch
Ich habe ja auch nicht behauptet, dass du unrecht hast. Du hast hier:
Zuerst der von Auto, dann der von Fahrzeug. Zum Fremdschämen hier...
ja offen gelassen, ob du aufrufen oder ausführen meinst. Der von @Harry Kane gesetzte Kontext war zu diesem Zeitpunkt zwar "Aufrufen", aber es wäre doch etwas kleinkariert, dein Statement deshalb als falsch zu deklarieren. Ich wollte den Sachverhalt nur verdeutlichen (und bei der Gelgenheit selbst heraus finden, ob meine bisherige Meinung überhaupt stimmt).

aber nur @Harry Kane bekommt Likes....... Ungerecht!
Was deine like-Quote angeht, so kam es bei mir schon häufiger vor, dass ich einen fachlich guten Beitrag von dir nicht geliked habe, weil irgendwelche Zusatzbemerkungen enthalten waren, mit denen ich nicht in Verbindung gebracht werden wollte.;)
 

Harry Kane

Top Contributor
Naja, ich dachte, bei Verzicht auf provokante Formulierungen und Fragen, und bereitwilliges Zugeben des eigenen Fehlers liesse sich womöglich eine professionelle Diskussionsatmosphäre schaffen.
Seis drum. Wenn er glaubt sich mit seiner Art einen Gefallen zu tun, soll er doch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Luk10 Sinn von Instanzierung ohne Referenz Java Basics - Anfänger-Themen 7
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
O Warum bekommen wir nicht die Referenz vom zurückgegebenen Objekt? Java Basics - Anfänger-Themen 4
P Wie rufe ich Methoden mit einer Referenz auf eine Klasse||Objekt auf Java Basics - Anfänger-Themen 4
C Kopie oder Referenz ? Java Basics - Anfänger-Themen 5
A Binärbaum rekursiv durchsuchen und Referenz zurückgeben Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
Y Pointer / Referenz - Theorie Java Basics - Anfänger-Themen 3
H Referenz Objekt aufrufen Java Basics - Anfänger-Themen 12
D Uebergabe per Referenz Java Basics - Anfänger-Themen 2
O Referenz - toString Java Basics - Anfänger-Themen 9
S This-Referenz Java Basics - Anfänger-Themen 6
F Referenz an ein Objekt in einer anderen Klasse erstellen(Nullpointer exception) Java Basics - Anfänger-Themen 6
I Referenz auf Klasse als Rückgabewert Java Basics - Anfänger-Themen 7
P Datentypen LinkedList: Kopie behält Referenz? Java Basics - Anfänger-Themen 3
I Erste Schritte Referenz zum Knoten davor, in einer Liste Java Basics - Anfänger-Themen 4
M Referenz geht bei Zwischenspeichern verloren (ArrayList) Java Basics - Anfänger-Themen 4
8 Referenz (Pointer, Zeiger) in Java Java Basics - Anfänger-Themen 9
O This-Referenz als Returnwert einer Methode? Java Basics - Anfänger-Themen 13
O This Referenz Java Basics - Anfänger-Themen 3
A top referenz bei queues Java Basics - Anfänger-Themen 1
J Rückgabe als Wert, keine Referenz Java Basics - Anfänger-Themen 3
Q Parameterübergabe - Objekt - Referenz Java Basics - Anfänger-Themen 5
C Dynamische Referenz & abstrakte Klassen Java Basics - Anfänger-Themen 3
V Frage zu Polymorphismus: Objekt der Subklasse in Referenz der Oberklasse Java Basics - Anfänger-Themen 4
T Aufgerufene Methode Inhalt der übergebenen Referenz Java Basics - Anfänger-Themen 5
B Referenz in Java Java Basics - Anfänger-Themen 5
C Referenz auf ein Objekt kopieren! Java Basics - Anfänger-Themen 2
J Methoden Referenz und Speicherplatz für Objekte reservieren Java Basics - Anfänger-Themen 2
M Wie komm ich an die Referenz eines Oberflächenelements Java Basics - Anfänger-Themen 2
A Klassenvariablen Referenz auf ein Objekt Java Basics - Anfänger-Themen 18
M Referenz Frage Java Basics - Anfänger-Themen 12
K OOP Probleme mit Objekt-Referenz in Methode Java Basics - Anfänger-Themen 6
W Die leidige Referenz-Frage Java Basics - Anfänger-Themen 9
B Arraycopy kopiert nur die Referenz?! Java Basics - Anfänger-Themen 3
S Speicheradresse auf die eine Referenz zeigt ausgeben Java Basics - Anfänger-Themen 12
E Compiler-Fehler kann Objekt-Referenz nicht erstellen Java Basics - Anfänger-Themen 3
B Referenz zu anderen Frame Java Basics - Anfänger-Themen 10
Blackskyliner Referenz ähnlicher Zugriff, aber wie? Java Basics - Anfänger-Themen 4
K Klassen this-Referenz und Klassen/Methodenaufruf Syntax Java Basics - Anfänger-Themen 3
C Referenz einer bereits instanziierten Klasse während des Programmablaufs Java Basics - Anfänger-Themen 16
H Objekt holen per Referenz als String. Java Basics - Anfänger-Themen 4
T Referenz einer Variable übergeben Java Basics - Anfänger-Themen 3
S Datentypen Objekt Integer Referenz Java Basics - Anfänger-Themen 5
B Referenz auf Referenz Java Basics - Anfänger-Themen 3
Luk10 Problem mit Singleton bzw statischer Referenz! Java Basics - Anfänger-Themen 16
H ArrayList Zugriffe per Referenz verkürzen? Java Basics - Anfänger-Themen 9
B Static Referenz auf Non-static Feld Java Basics - Anfänger-Themen 6
C0FFEE Referenz auf Methode übergeben Java Basics - Anfänger-Themen 2
aze NullpointerException :Null Referenz anzeigen lassen Java Basics - Anfänger-Themen 2
D Fehlen einer Referenz auf Objekt Java Basics - Anfänger-Themen 14
N this.referenz erläuterung Java Basics - Anfänger-Themen 2
K Attribut als Referenz auf Objekt Java Basics - Anfänger-Themen 8
K 3 Threads bearbeiten 1 Referenz: Ich versteh's nicht... Java Basics - Anfänger-Themen 2
P OOP-Theorie-Frage: Referenz auf Objekt Java Basics - Anfänger-Themen 27
D Referenz auf Objekt Java Basics - Anfänger-Themen 5
P Methode BigInteger-Array übergeben als Referenz Java Basics - Anfänger-Themen 6
U null-referenz Java Basics - Anfänger-Themen 26
deetee Problem mit Referenz auf Map Java Basics - Anfänger-Themen 5
G Interface referenz probleme Java Basics - Anfänger-Themen 10
V Return - JA/NEIN - Parameterübergabe Array (Referenz) Java Basics - Anfänger-Themen 7
D enum und Referenz der umgebenden Klasse Java Basics - Anfänger-Themen 2
C Referenz Java Basics - Anfänger-Themen 11
A ClassNotFoundException: Referenz nicht aktualisiert Java Basics - Anfänger-Themen 2
P Textarea aktualisieren, Referenz fehlt Java Basics - Anfänger-Themen 4
T Die this Referenz Java Basics - Anfänger-Themen 21
C Größe einer Referenz ? Java Basics - Anfänger-Themen 16
D Array reverse Problem, da Referenz nicht auf tmpArray zeigt Java Basics - Anfänger-Themen 4
G primitive Datentypen als Referenz an eine Methode übergeben Java Basics - Anfänger-Themen 2
G Wie Referenz auf Objekt übergebn Java Basics - Anfänger-Themen 8
P Objekte als Attribut: Referenz oder Kopie? Java Basics - Anfänger-Themen 3
G Parameterübergabe als Referenz bzw. als Kopie Java Basics - Anfänger-Themen 4
S Prüfen, ob null Referenz? Java Basics - Anfänger-Themen 2
G Referenz-Problem Java Basics - Anfänger-Themen 3
J Referenz problem Java Basics - Anfänger-Themen 12
D tiefergehende Java-Referenz Java Basics - Anfänger-Themen 3
M Referenz auf Membervariable Java Basics - Anfänger-Themen 5
G Objektübergabe als Referenz bei RMI Java Basics - Anfänger-Themen 2
J referenz auf noch nicht erzeugte objekte? Java Basics - Anfänger-Themen 2
G Rückgabe einer Kopie bzw. Referenz Java Basics - Anfänger-Themen 22
M Parameter als Referenz übergeben Java Basics - Anfänger-Themen 5
F Referenz Pointer oder doch nochmal neu suchen ? Java Basics - Anfänger-Themen 2
D Unterschied zwischen Referenz auf Objekt/Instanz von Objekt Java Basics - Anfänger-Themen 9
K Referenz auf Funktion Java Basics - Anfänger-Themen 6
J Referenz auf ein Objekt Java Basics - Anfänger-Themen 2
javasdann Referenz als String ausgeben. Java Basics - Anfänger-Themen 10
B Was ist eine Referenz? Java Basics - Anfänger-Themen 6
Z Zugriff auf Attribute nach Zuweisung einer Referenz Java Basics - Anfänger-Themen 8
L Referenz vs. Kopie Java Basics - Anfänger-Themen 2
G Zeiger/Referenz auf int- Variable Java Basics - Anfänger-Themen 5
B Erste Schritte Frage zu Instanzierung und Referenzen Java Basics - Anfänger-Themen 8
G unklares Verhalten nach Instanzierung neuer Klasse Java Basics - Anfänger-Themen 3
R OOP Instanzierung in verschiedenen Klassen Java Basics - Anfänger-Themen 8
C String Objekte Vergleich je nach Instanzierung unterschiedlich!!?!! Java Basics - Anfänger-Themen 4
B Zwei Unterschiedliche Klassen bei Instanzierung Java Basics - Anfänger-Themen 5
neurox Datentypen Instanzierung eines Gernerischen Objektes? Java Basics - Anfänger-Themen 10
F HashSet und LinkedHashSet Instanzierung warum so? Java Basics - Anfänger-Themen 7
F Verständnisfrage Objekt instanzierung / Polymorphie Java Basics - Anfänger-Themen 10
G import vs. direkte Instanzierung Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben