fragen

  • Themenstarter Themenstarter Heyoka955
  • Beginndatum Beginndatum
H

Heyoka955

Gast
• Welche der folgenden Aussagen ist korrekt?
1. Die Klasse eines Objekts kann nicht geändert werden
2. Der deklarierte Typ kann die Klasse des Objektes sein oder jeder Supertyp
3. Deklarierte Typen kann man mit einem Typecast ändern
4. Deklarierte Typen kann man ohne Typecast abschwächen



meine antwort wäre 4 da bei 2 das problem auftaucht dass nicht jeder supertyp als deklarierter typ dastehen kann, denn dieses jeder bezieht sich auf Klassen die und superklassen die miteinender nix zu tun haben.

Zbs wie Fahrzeug a = new Fernseher(); Fahrzeug wäre dann irgendeine superklasse und Fernseher wäre irgendein objekt welches Fahrzeug nicht kennt oder erbt.

1 kann es auch nicht sein da, man eine klasse ändern kann immer? finde die frage seltsam formuliert.

die drei kann es auch nicht sein da immer der actual type geändert wird und nicht der deklarierter typ

daheer gehe ich zu 4 wobei ich bei 3 auch kritisch stehe
 
Sorry, ich muss mich erst wieder an der Tischkante hochziehen. 😀 Heyoka zieht den Bytecode-Editor raus und beweist, dass man die Klasse eines Objekts ändern kann. 😀
Hmm, das ist jetzt interessant. Was für Bytecode Tools sind denn da so üblich? Aber jetzt erkenne ich, was Heyoka vor hat: Er schreibt ein System, das Bytecode erstellt/abändert und dann macht das die ganze Arbeit. Das erklärt auch, wieso er sich nicht intensiver mit Java beschäftigt: Wozu auch? Das übernimmt ja in Kürze seine Software!

• Welche der folgenden Aussagen ist korrekt?
1. Die Klasse eines Objekts kann nicht geändert werden
2. Der deklarierte Typ kann die Klasse des Objektes sein oder jeder Supertyp
3. Deklarierte Typen kann man mit einem Typecast ändern
4. Deklarierte Typen kann man ohne Typecast abschwächen



meine antwort wäre 4 da bei 2 das problem auftaucht dass nicht jeder supertyp als deklarierter typ dastehen kann, denn dieses jeder bezieht sich auf Klassen die und superklassen die miteinender nix zu tun haben.

Zbs wie Fahrzeug a = new Fernseher(); Fahrzeug wäre dann irgendeine superklasse und Fernseher wäre irgendein objekt welches Fahrzeug nicht kennt oder erbt.

1 kann es auch nicht sein da, man eine klasse ändern kann immer? finde die frage seltsam formuliert.

die drei kann es auch nicht sein da immer der actual type geändert wird und nicht der deklarierter typ

daheer gehe ich zu 4 wobei ich bei 3 auch kritisch stehe
Wie wäre es denn, wenn Du zu jeder der Aussagen folgendes schreiben würdest:
a) Was besagt der Satz genau?
b) Was sind die Grundlagen hinter dem angesprochenen Thema?
c) Warum ist dies richtig oder falsch? Ggf. Beispiele bzw. Gründe, wieso es falsch ist.

Das hilft Dir auch beim Verständnis der ganzen Zusammenhänge....

Also bei 1. solltest Du z.B. klar sagen, was denn Klasse und Objekt sind und wie diese zusammen hängen....
Bei 2. wäre interessant, was eine Deklaration ist, was der deklarierte Typ ist und was ist ein Supertyp.
Bei 3. kommt dann die Frage nach dem Typecast - was bedeutet das?
Bei 4. wäre die Frage nach dem "abschwächen" ... was meint das?

Also: Beschäftige Dich damit! Teilweise hatten wir die angesprochenen Themen bereits aber in dem Thread hattest Du nur die eine Antwort mit dem "ja" beachtet und alles andere wohl nicht verstanden.... sonst wäre Dein erbärmlicher Versuch, die Frage zu beantworten, nicht zu erklären!
Und ja - irgendwie habe ich (und auch Andere!) Dir schon vor Monaten (!!) geschrieben, dass es Sinn machen könnte, sich mit den Grundlagen vertraut zu machen ... Irgendwann solltest Du doch merken, dass durchaus notwendig ist!
(Oder statt dessen einfach aufhören - Landschaftsbauer suchen derzeit eigentlich fast überall Personal und das ist ein ganz toller Job. Viel an der frischen Luft also fast wie chillen! Und da brauchst Du dann wirklich keine Java Grundlagen!)
 
Hmm, das ist jetzt interessant. Was für Bytecode Tools sind denn da so üblich? Aber jetzt erkenne ich, was Heyoka vor hat: Er schreibt ein System, das Bytecode erstellt/abändert und dann macht das die ganze Arbeit. Das erklärt auch, wieso er sich nicht intensiver mit Java beschäftigt: Wozu auch? Das übernimmt ja in Kürze seine Software!


Wie wäre es denn, wenn Du zu jeder der Aussagen folgendes schreiben würdest:
a) Was besagt der Satz genau?
b) Was sind die Grundlagen hinter dem angesprochenen Thema?
c) Warum ist dies richtig oder falsch? Ggf. Beispiele bzw. Gründe, wieso es falsch ist.

Das hilft Dir auch beim Verständnis der ganzen Zusammenhänge....

Also bei 1. solltest Du z.B. klar sagen, was denn Klasse und Objekt sind und wie diese zusammen hängen....
Bei 2. wäre interessant, was eine Deklaration ist, was der deklarierte Typ ist und was ist ein Supertyp.
Bei 3. kommt dann die Frage nach dem Typecast - was bedeutet das?
Bei 4. wäre die Frage nach dem "abschwächen" ... was meint das?

Also: Beschäftige Dich damit! Teilweise hatten wir die angesprochenen Themen bereits aber in dem Thread hattest Du nur die eine Antwort mit dem "ja" beachtet und alles andere wohl nicht verstanden.... sonst wäre Dein erbärmlicher Versuch, die Frage zu beantworten, nicht zu erklären!
Und ja - irgendwie habe ich (und auch Andere!) Dir schon vor Monaten (!!) geschrieben, dass es Sinn machen könnte, sich mit den Grundlagen vertraut zu machen ... Irgendwann solltest Du doch merken, dass durchaus notwendig ist!
(Oder statt dessen einfach aufhören - Landschaftsbauer suchen derzeit eigentlich fast überall Personal und das ist ein ganz toller Job. Viel an der frischen Luft also fast wie chillen! Und da brauchst Du dann wirklich keine Java Grundlagen!)

1.ein objekt ist eine Instanz der klasse. Wir haben eine klasse das verhalten implementiert mit seinen jeweiligen Attributen und Methoden. Wenn man ein Objekt machen möchte muss man diese jeweilige klasse instanziieren. Das heißt das Objekt ist abhängig von der Klasse wenn man die klasse ändert, ändert man auch die Funktionen die das objekt hat was man aber nicht ändert ist die Adresse des speichers.

2. Ein deklarierter typ kann man sich als den End Typ vorstellen bzw er ist staatisch und wird nicht zur laufzeit bestimmt. Ein aktueller Typ wird zur laufzeit bestimmt. Eine superklasse kann man sich wie ein Familienbaum vorstellen und zwar dass es einen gemeinsamen Vorfahren gibt von dem man bestimmte eigenschaften erbt. wie zbs fahrzeug die superklasse und auto die unterklasse, darunter versteht man eine echte is bezeihung.

Type casten ist das man ein objekt abändert. Zbs haben wir eine oberklasse und eine unterklasse und wir haben als dann
Fahrzeug a = new Auto(); durch den typcast wäte die instanz nicht mehr von typ auto sondern type fahrzeug also so
Fahrzeug a = (Fahrzeug)Auto();


mit abschwächen stelle ich mir vor dass man eine oberklasse zu einem unteren Typen abwschwächt, die dieser in der Hierarchie weiter unten liegt. Also Fahrzeug q = new Auto(); Das wäre eine Abwschwächung.
 
Das müssen heyokanische sein.
Ok, wobei es da ja auch ohne ihn einiges gibt. Im AOP Bereich kommt da teilweise einiges. Wobei ich da jetzt nicht tief genug drin stecke um zu sehen, in wie weit bei Spring oder Hibernate auch Klassen (deren Bytecode) verändert werden oder ob es da nur um neuen Code geht (z.B. Erstellung von Proxies und so...)

Hier nutze ich zwar z.B. bei Spring einige Möglichkeiten, aber habe mir noch nicht alles im Detail erarbeitet, so dass ich nicht mit Sicherheit sagen kann, was da alles genau im Hintergrund passiert.

Aber an Libraries sind da wohl cglib (https://github.com/cglib/cglib/wiki) und asm (https://asm.ow2.io/) nennenswert. (Die Seite von cglib nennt aber noch deutlich mehr Libraries, die da dann auf cglib aufbauen....)

1.ein objekt ist eine Instanz der klasse. Wir haben eine klasse das verhalten implementiert mit seinen jeweiligen Attributen und Methoden. Wenn man ein Objekt machen möchte muss man diese jeweilige klasse instanziieren. Das heißt das Objekt ist abhängig von der Klasse wenn man die klasse ändert, ändert man auch die Funktionen die das objekt hat was man aber nicht ändert ist die Adresse des speichers.

2. Ein deklarierter typ kann man sich als den End Typ vorstellen bzw er ist staatisch und wird nicht zur laufzeit bestimmt. Ein aktueller Typ wird zur laufzeit bestimmt. Eine superklasse kann man sich wie ein Familienbaum vorstellen und zwar dass es einen gemeinsamen Vorfahren gibt von dem man bestimmte eigenschaften erbt. wie zbs fahrzeug die superklasse und auto die unterklasse, darunter versteht man eine echte is bezeihung.

Type casten ist das man ein objekt abändert. Zbs haben wir eine oberklasse und eine unterklasse und wir haben als dann
Fahrzeug a = new Auto(); durch den typcast wäte die instanz nicht mehr von typ auto sondern type fahrzeug also so
Fahrzeug a = (Fahrzeug)Auto();


mit abschwächen stelle ich mir vor dass man eine oberklasse zu einem unteren Typen abwschwächt, die dieser in der Hierarchie weiter unten liegt. Also Fahrzeug q = new Auto(); Das wäre eine Abwschwächung.

Also erst einmal Danke, dass Du auf meine Antwort eingegangen bist:
1) Wenn Du eine Instanz einer Klasse hast: Kannst Du dann die Klasse der Instanz ändern? Das ist ja die Kernfrage.
(Und da Du schreibst, dass Du die Klasse ändern kannst: Wenn Du eine Klasse änderst: Wie verhält sich das denn dann mit der Instanz? Das eine ist doch Compile Zeit und das andere Laufzeit.....)
2) Da hast Du sehr schön einiges rein gepackt.
Dein Beispiel mit Fahrzeug a = new Auto() deckt sehr viel ab. Da sehe ich durchaus die Punkte 2-4...

Also mit der Vorarbeit wäre jetzt du jedem Punkt: Ist es nun wahr oder falsch? Jeweils ein Beispiel, was es als Code bedeuten würde (und so es falsch ist, kann der Code eben nicht compiliert werden).
 
Ok, wobei es da ja auch ohne ihn einiges gibt. Im AOP Bereich kommt da teilweise einiges. Wobei ich da jetzt nicht tief genug drin stecke um zu sehen, in wie weit bei Spring oder Hibernate auch Klassen (deren Bytecode) verändert werden oder ob es da nur um neuen Code geht (z.B. Erstellung von Proxies und so...)

Hier nutze ich zwar z.B. bei Spring einige Möglichkeiten, aber habe mir noch nicht alles im Detail erarbeitet, so dass ich nicht mit Sicherheit sagen kann, was da alles genau im Hintergrund passiert.

Aber an Libraries sind da wohl cglib (https://github.com/cglib/cglib/wiki) und asm (https://asm.ow2.io/) nennenswert. (Die Seite von cglib nennt aber noch deutlich mehr Libraries, die da dann auf cglib aufbauen....)



Also erst einmal Danke, dass Du auf meine Antwort eingegangen bist:
1) Wenn Du eine Instanz einer Klasse hast: Kannst Du dann die Klasse der Instanz ändern? Das ist ja die Kernfrage.
(Und da Du schreibst, dass Du die Klasse ändern kannst: Wenn Du eine Klasse änderst: Wie verhält sich das denn dann mit der Instanz? Das eine ist doch Compile Zeit und das andere Laufzeit.....)
2) Da hast Du sehr schön einiges rein gepackt.
Dein Beispiel mit Fahrzeug a = new Auto() deckt sehr viel ab. Da sehe ich durchaus die Punkte 2-4...

Also mit der Vorarbeit wäre jetzt du jedem Punkt: Ist es nun wahr oder falsch? Jeweils ein Beispiel, was es als Code bedeuten würde (und so es falsch ist, kann der Code eben nicht compiliert werden).
was soll ich jetzt machen


also 3 und 4 wären die richtige antwort
 
was soll ich jetzt machen
Lernen und denken.

Ok, wobei es da ja auch ohne ihn einiges gibt. Im AOP Bereich kommt da teilweise einiges. Wobei ich da jetzt nicht tief genug drin stecke um zu sehen, in wie weit bei Spring oder Hibernate auch Klassen (deren Bytecode) verändert werden oder ob es da nur um neuen Code geht (z.B. Erstellung von Proxies und so...)
Schon, aber IMO nichts, was dem Objekt die Klasse unter den Füßen wegzieht 🙂 Und ja, der Bytecode wird z. B. bei Eclipselink verändert (vermutlich auch bei Hibernate).
 
Du bist echt lustig. Du gibst richtige Erklärungen und ziehst daraus völlig falsche Schlüsse.

Bei 1 schreibst Du halbwegs richtig "Das heißt das Objekt ist abhängig von der Klasse". Damit wäre schon alles gesagt. Ändern der Klasse geht nicht. Aber Du spinnst Dir irgendwas zusammen: "wenn man die klasse ändert, ändert man auch die Funktionen die das objekt hat was man aber nicht ändert ist die Adresse des speichers."

Stell Dir mal hintereinander parkender Autos (Objekte der Klasse PKW) als Auszug des Speichers vor. Du sagst: ja, ich kann aus meinem Golf einen 40-Tonner machen, ohne den Stellplatz (=Speicheradresse) zu ändern. Mal abgesehen von dem Wunder, aus einem Golf einen 40-Tonner, ein Flugzeug oder sonstwas machen zu können, würde es für die anderen Autos oft ganz schön eng werden.

Jetzt sagst Du 2 geht nicht, 4 schon. Oben in Deiner Erklärung hast Du für beide das gleiche Beispiel angeführt. Da kann irgendwas nicht ganz stimmen.

Und warum ist jetzt plötzlich 3 nicht mehr richtig? (Das ist eine Frage ohne Wertung)
 
Du bist echt lustig. Du gibst richtige Erklärungen und ziehst daraus völlig falsche Schlüsse.

Bei 1 schreibst Du halbwegs richtig "Das heißt das Objekt ist abhängig von der Klasse". Damit wäre schon alles gesagt. Ändern der Klasse geht nicht. Aber Du spinnst Dir irgendwas zusammen: "wenn man die klasse ändert, ändert man auch die Funktionen die das objekt hat was man aber nicht ändert ist die Adresse des speichers."

Stell Dir mal hintereinander parkender Autos (Objekte der Klasse PKW) als Auszug des Speichers vor. Du sagst: ja, ich kann aus meinem Golf einen 40-Tonner machen, ohne den Stellplatz (=Speicheradresse) zu ändern. Mal abgesehen von dem Wunder, aus einem Golf einen 40-Tonner, ein Flugzeug oder sonstwas machen zu können, würde es für die anderen Autos oft ganz schön eng werden.

Jetzt sagst Du 2 geht nicht, 4 schon. Oben in Deiner Erklärung hast Du für beide das gleiche Beispiel angeführt. Da kann irgendwas nicht ganz stimmen.

Und warum ist jetzt plötzlich 3 nicht mehr richtig? (Das ist eine Frage ohne Wertung)
mein kopf war verwirrt wegen theoretische Informatik. Sorry 1 geht nicht Begründung oben, 2 geht nicht weil nicht jede superklasse nicht zu jedem objekt passt also Begründung oben und drei geht auch nicht man kann nur actuall type casten und 4 wäre die einzig richtige loesung
 
Also 1 "geht nicht" bedeutet: Ist die Aussage richtig oder falsch?
Bei 2 bezieht sich da Supertyp natürlich nicht auf alle Supertypen, die es gibt sondern nur auf die Supertypen des Objekts!
Bei 3: Ist habe Fahrzeug f als Variable deklariert. Ich bin mir aber sicher, dass da ein Auto drin ist. Ich komme also nicht über ein cast an das Auto?
 
Also 1 "geht nicht" bedeutet: Ist die Aussage richtig oder falsch?
Bei 2 bezieht sich da Supertyp natürlich nicht auf alle Supertypen, die es gibt sondern nur auf die Supertypen des Objekts!
Bei 3: Ist habe Fahrzeug f als Variable deklariert. Ich bin mir aber sicher, dass da ein Auto drin ist. Ich komme also nicht über ein cast an das Auto?
1.richtig
2. in dem falle würde das gehen wenn das die superklasse des Objektes ist
3. stimmt dann ist das richtig. aber also Auto s = (Auto)f;

aber wäre er in dem falle nicht ein actual type anstatt declared type.
 
Java:
public class A{
    public A(){
       
    }
}

public class B{
    private A a;
   
    public B(A ab){
        this.a=ab;
    }
}

public class C{
    public C(){
       
    }
   
    public void e(A ae){      
    }
   
    public void f(){
        A af;
        af= new A;

    }
}

Wo erfolgen hier Deklarationen und wo Implementierungen? Wie muss das erweitert werden mit einer "class D", um die Fragestellungen zu untersuchen?

NUR ANTWORTEN VOM TE
 

Zurück
Oben