Welche Klasse besitzt einen Standardkonstruktor ?

Status
Nicht offen für weitere Antworten.

Nudge

Mitglied
Ich bearbeite gerade eine Klausuraufgabe zum Thema Standardkonstruktor. Folgende Klassen sind vorgegeben:


Code:
class A
{
 double d;

 A()
 {
  d = 3.5;
 }

}

class B extends A
{
 B(double d)

 {
  this.d = d;
 }

}

class C extends B
{

 C(double d)
 {
  super(d);
 }

}

Die Frage dazu: welche dieser Klassen besitzt einen Standardkonstruktor - A, B oder C ?

Nun würde ich gerne Eure Meinung dazu wissen. Ich für meinen Teil, habe meine Antwort schon: keine der Klassen besitzt einen Standardkonstruktor !

Wollte aber zusätzlich Euren Rat dazu einholen.
 
^^ das natürlich schwer jetzt, ich will deine hausaufgaben ned machen, anderseits gibts über 100 beispiele mit dieser frage als übung.

begründe pls wieso du nichts gewählt hast(geraten?)

- hab bei google 1. eintrag lösung gefunden btw.
 
1. Schritt: Nachschauen, was ein Standardkonstruktor ist (Java Insel, Script der Vorlesung, XY Buch des Professors)
2. Schritt: richtige Antwort ankreuzen (wenn Du schon weisst, dass genau eine Klasse einen Default Konstruktor hat). Zudem sollte man die einfachen Grundlagen nicht vernachlässigen 😛
 
SlaterB hat gesagt.:
meine Meinung ist A,

was ist deine DEFINITION eines Standardkonstruktors?!

Ich dachte auch zuerst an A. Aber streng genommen spricht man nur dann von einem Standardkonstruktor, wenn diesen der Compiler anlegt. Natürlich kann man den Standardkonstruktor überschreiben, aber dann ist es kein Standardkonstruktor mehr !

Hier mal ein Beispiel:

Code:
class A 
{ 
} 
 
class B extends A 
{ 
}


Der Compiler macht nun Folgendes, da kein expliziter Konstruktor definiert wurde:

Code:
class A 
{ 
  A()
 { 
    super();         // für Object() 
  } 
} 

class B extends A
{ 
  B()
 { 
    super();         // für A() 
  } 
}

Sobald ich einen eigenen Standardkonstruktor definiere, existiert der defaultmäßige nicht mehr.
 
Ich hab die Definition nicht gelesen, hab aber auch keine Lust dazu.
Bin der Meinung, B und C haben einen Standartkonstruktor...

Grund:
Standartkonstruktor
Code:
B()
{
}

und
Code:
C()
{
}

werden nicht überschrieben, sondern bekommen jeweils einen zweiten Konstruktor mit einem Übergabe Wert vom Typ double dazu.
 
Anonymous hat gesagt.:
Ich hab die Definition nicht gelesen, hab aber auch keine Lust dazu.
Bin der Meinung, B und C haben einen Standartkonstruktor...

Grund:
Standartkonstruktor [...]
werden nicht überschrieben, sondern bekommen jeweils einen zweiten Konstruktor mit einem Übergabe Wert vom Typ double dazu.

Konstruktoren werden niemals überschrieben. Was meinst Du mit Überschreiben? Und was dazu kommt da auch nicht. Der Standardkonstruktor wird nur erzeugt, wenn kein anderer definiert wurde, und das ist hier nicht der Fall.
 
RicoSoft hat gesagt.:
1. Schritt: Nachschauen, was ein Standardkonstruktor ist (Java Insel, Script der Vorlesung, XY Buch des Professors)
2. Schritt: richtige Antwort ankreuzen (wenn Du schon weisst, dass genau eine Klasse einen Default Konstruktor hat). Zudem sollte man die einfachen Grundlagen nicht vernachlässigen 😛

Nur zur Info: ich bin selbst schon seit einigen Jahren Diplom-Informatiker :bae: Mir ist durchaus bewußt, was ein Standardkonstruktor ist. Wer sich allerdings mal die Mühe macht, etwas zu googlen, der findest schnell heraus, daß die Frage nicht so einfach zu beantworten ist.

Die Frage ist doch: spricht man nur dann von einem Standardkonstruktor, wenn der Compiler diesen implizit anlegt (dann wäre es wohl ein Defaultkonstruktor) oder auch schon, wenn man einen eigenen "Standardkonstruktor" explizit definiert ?

Standardmäßig legt der Compiler bei Nichtvorhandensein eines Konstruktors implizit einen an, in der Form <Klassenname> () {}
 
> Die Frage ist doch: spricht man nur dann von einem Standardkonstruktor, wenn der Compiler diesen implizit anlegt (dann wäre es wohl ein Defaultkonstruktor) oder auch schon, wenn man einen eigenen "Standardkonstruktor" explizit definiert ?

diese Frage hat dann aber nix mit der Aufgabe zu tun, sondern könntest du so stellen,

außerdem ist diese Frage leicht behämmert, 'Standardkonstruktor' ist doch nur ein Wort,
was sich jeder so hindefinieren kann wie er/ sie es will

wenn du keine Definition hast, dann ist die Frage sinnlos,
hast du dagegen eine, dann sollte es doch klar sein..
 
Körby hat gesagt.:
Ich hab die Definition nicht gelesen, hab aber auch keine Lust dazu.
Bin der Meinung, B und C haben einen Standartkonstruktor...

Grund:
Standartkonstruktor
Code:
B()
{
}

und
Code:
C()
{
}

werden nicht überschrieben, sondern bekommen jeweils einen zweiten Konstruktor mit einem Übergabe Wert vom Typ double dazu.

Sorry, sobald ich einen eigenen Konstruktor definiere (selbst, wenn dieser keine Parametrisierung aufweist), gibt es keinen Defaultkonstruktor seitens des Compilers mehr. Man kann auf diesen dann auch nicht mehr zugreifen. In diesem Fall muß man sich selbst eine Standardkonstruktor anlegen. Das ist dann aber nicht mehr der eigentliche Defaultkonstruktor !
 
Nudge hat gesagt.:
Standardmäßig legt der Compiler bei Nichtvorhandensein eines Konstruktors implizit einen an, in der Form <Klassenname> () {}
Und warum tut er das überhaupt?
Weil zum Erzeugen einer Instanz immer ein Konstruktor benötigt wird. Im einfachsten Fall eben ein Konstruktor der keine Argumente hat und nichts tut außer den Konstruktor der Superklasse aufzurufen.
Darum würde ich als Defaultkonstruktor oder Standardkonstruktor einen Konstruktor mit keinen Argumenten sehen.
Egal ob er vom Compiler oder vom Programmierer angelegt wird.

ms
 
ms hat gesagt.:
Darum würde ich als Defaultkonstruktor oder Standardkonstruktor einen Konstruktor mit keinen Argumenten sehen.
Egal ob er vom Compiler oder vom Programmierer angelegt wird.
Und genau das ist falsch (rein terminologisch). Sobald du einen Konstruktor definierst, gibt es keinen Standartkonstrukter mehr. Es ist halt so...
 
wenn man streng sein müsste:

If the class being declared is the primordial class Object, then the default constructor has an empty body.

also ne Klasse die nix extended (also A), hat einen Defaultkonstruktor mit einem leeren Körper.

Dabei würde A ausscheiden, denn da ist ja was drin.
 
ms hat gesagt.:
Nudge hat gesagt.:
Standardmäßig legt der Compiler bei Nichtvorhandensein eines Konstruktors implizit einen an, in der Form <Klassenname> () {}
Und warum tut er das überhaupt?
Weil zum Erzeugen einer Instanz immer ein Konstruktor benötigt wird. Im einfachsten Fall eben ein Konstruktor der keine Argumente hat und nichts tut außer den Konstruktor der Superklasse aufzurufen.
Darum würde ich als Defaultkonstruktor oder Standardkonstruktor einen Konstruktor mit keinen Argumenten sehen.
Egal ob er vom Compiler oder vom Programmierer angelegt wird.

ms

Dann lies mal das Untenstehende. Demzufolge wird ein Defaultkonstruktor stets implizit angelegt, ein Standardkonstruktor nicht. Wenn der Aufgabensteller also den Unterschied zwischen "Defaultkonstruktor" und "Standardkonstruktor" kennt, ist die Antwort auf die gestellte Frage die Klasse A. Selbst wenn ich mir selbst einen Kontruktor der Form "A () {}" definiere, wäre es dann nicht mehr der Defaultkonstruktor. So, und jett soll mir nochmal jemand sagen, daß die Aufgabe trivial ist ...

"Allerdings ist auch diese Bezeichnung begrifflich nicht unbedingt treffend für einen parameterlosen Konstruktor, denn ein Vorgabekonstruktor (“default constructor ”) ist ein Konstruktor, der verwendet wird, wenn kein Konstruktor explizit angegeben wurde. Um einen parameterlosen Konstruktor zu bezeichnen sollte am besten die Bezeichnung parameterloser Konstruktor verwendet werden und dies kann auch ein ausdrücklich notierter Konstruktor sein, der kein Vorgabekonstruktor ist. In Java ist allerdings ein erzeugter Vorgabekonstruktor immer parameterlos, aber ein expliziter parameterloser Konstruktor ist kein Vorgabekonstruktor.

Ein Konstruktor mit Parametern kann als parametrisierter Konstruktor bezeichnet werden."
 
Jango hat gesagt.:
ms hat gesagt.:
Darum würde ich als Defaultkonstruktor oder Standardkonstruktor einen Konstruktor mit keinen Argumenten sehen.
Egal ob er vom Compiler oder vom Programmierer angelegt wird.
Und genau das ist falsch (rein terminologisch). Sobald du einen Konstruktor definierst, gibt es keinen Standartkonstrukter mehr. Es ist halt so...

Naja, streng genommen gibt es bei der Erzeugung eines eigenen Konstruktors keinen Defaultkonstruktor mehr. Du könntest Dir ja auch selbst einen Konstruktor der Art "A () {}" erzeugen. Das wäre dann ein Standardkonstruktor, aber kein Defaultkonstruktor mehr.
 
Diese Diskussion betrifft nur mehr die Begrifflichkeiten.
Wie es funktioniert scheinen wir nun alle zu wissen.

Nochmal meine Frage: Wenn Defaultkonstruktor != Standardkonstruktor ist, wie ist dann die offizielle englische Bezeichnung für Standardkonstruktor?

ms
 
ms hat gesagt.:
Jango hat gesagt.:
rein terminologisch
:toll:

Wie wird denn der Standardkonstruktor im englischen bezeichnet?

ms
Ich verstehe deine Frage nicht - was hat das mit dem
Thema zu tun? "Terminologie" ist die Gesamtheit aller Begriffe, ob nun englisch, deutsch, vietnamesisch, hinterindisch, oder meinetwegen auch polnisch.
Das ändert nichts an der Tatsache, dass es so ist, wie ich geschrieben habe. :wink:
 
ms hat gesagt.:
Jango hat gesagt.:
rein terminologisch
:toll:

Wie wird denn der Standardkonstruktor im englischen bezeichnet?

ms

Dir kann geholfen werden:

Im Deutschen wird ein Konstruktor mit Parametern meist als allgemeiner Konstruktor bezeichnet, der parameterlose Konstruktor wird auch Standardkonstruktor genannt.

Diese Bezeichnungen können allerdings zu Mißverständnissen führen, sobald auch die englischsprachigen Bezeichnungen vorkommen, denn im Englischen ist mit “standard constructor ” nicht das gemeint, was im Deutschen als „Standardkonstruktor“ bezeichnet wird, sondern das, was im Deutschen als „allgemeiner Konstruktor“ bezeichnet wird, während das, was im Deutschen „Standardkonstruktor“ heißt, auf Englisch ein “default constructor ” ist.

uebliche Konstruktorbezeichnungen [Tabelle]

"Englisch", "Deutsch".

"default constructor", "Standardkonstruktor".
"standard constructor", "allgemeiner Konstruktor".
"general constructor", "allgemeiner Konstruktor".


Die Bezeichnung „Standardkonstruktor“ ist vielleicht als Übersetzung von “default constructor ” entstanden. Da hier aber Verwechslungen mit “standard constructor ” möglich sind, empfiehlt Stefan Ram statt dessen die Übersetzung „Vorgabekonstruktor“ für “default constructor ”, wenn man dann noch alle Bezeichnungen mit „Standard“ oder “standard ” vermeidet, ergeben sich nicht-mißverständliche Konstruktorbezeichnungen für den Vorgabekonstruktor und für Konstruktoren mit Parametern.

nicht-missverstaendliche Konstruktorbezeichnungen [Tabelle]

"Englisch", "Deutsch".

"default constructor", "Vorgabekonstruktor".
"general constructor", "allgemeiner Konstruktor".
 
Körby hat gesagt.:
Hab das mit B() und C() mal getestet, also einen Defaultkonstruktor besitzen die wirklich nicht...

Das ist auch absolut einleuchtend, da Du ja explizit einen Konstruktor definiert hast. Damit existiert dann kein Standardkonstruktor mehr.

Daher fallen die Antwortmöglichkeiten B und C komplett weg. Die Frage ist nur, was mit A ist ?
 
Ich verstehe deine Frage nicht - was hat das mit Thema zu tun? "Terminologie" ist die Gesamtheit aller Begriffe, ob nun englisch, deutsch, vietnamesisch, hinterindisch oder meinetwegen auch polnisch.
Das ändert nichts an der Tatsache, dass es so ist, wie ich geschrieben habe. :wink:

Wir meinen ja eh alle dasselbe, nur die Bezeichnung ist unterschiedlich, darum geht es letztendlich hier noch.

@Nudge
Danke

ms
 
also ich glaube wir sind uns einig, das die richtige antwort auf diese klausurfrage nur der lehrer geben kann. denn richtig in einer klausur ist das, was der lehrer als richtig ansieht.

ich würde jedoch sagen, wenn ein standard konstruktor ein konstruktor ohne Parameter ist, dann A
wenn ein standard konstruktor ein konstruktor ohne parameter ist der den konstruktor der superklasse aufruft, dann keine der gezeigten lösungen
 
In dem Buch SCJP for Java 5 Study Guide von Kathy Sierra und Bert Bates steht folgendes:

-) If you don't type a constructor into you class code, a default constructor will be automatically generated by the compiler.

-) The default constructor is ALWAYS a no-arg constructor.

-) A no-arg constructor is not necessarily the default (i.e., compiler-supplied) constructor, although the default constructor is always a no-arg constructor. The default constructor is the on the compiler provides! While the default constructor is always a no arg constructor, you're free to put in your own no-arg constructor.

Damit sollten jetzt alle Klarheiten beseitigt sein.

Bin übrigens auch für Antwort A.

ms
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben