hast du einen Link dazu? warum sollten Methoden mit einem bestimmten einzelnen Objekt verknüpft sein, warum die Arbeit + Speicherplatz irgendwelche Adressen für Methoden individuell für dieses Objekt anzulegen, abzulegen, zu nutzen usw., bei jedem von potentiell Millionen Objekten einzeln?
das ergibt sich doch alles aus den Klassen,
interessant dabei vielleicht noch ‘Static Binding vs Dynamic binding’
https://javarevisited.blogspot.com/2012/03/what-is-static-and-dynamic-binding-in.html
aber alles was es für Dynamic braucht ist das Objekt und darin die Information, welche konkrete Klasse es hat, entfernt vielleicht noch generische Parameter, dann der Rest wieder allein aus dem initialen Quellcode analysierbar, welche Methode aufzurufen usw.,
nirgendwo muss zum Objekt ein Plan von Methoden, Adressen, was auch immer abgelegt werden?!
das wäre ja mal eine neue Einsicht, falls so vorhanden
passt ja auch nicht zu bekannten Speicheranalysen von Millionen abgelegten Objekten,
wieviel Byte ein Objekt im Speicher belegt und welcher Inhalt darin, das ist ziemlich bekannt,
nur die harten Fakten, die Inhalte der Instanzattribute, wenig allgemeines zum Objekt selber wie die Klasse
https://www.baeldung.com/java-size-of-object
alles andere passiert sowieso außenrum von der Runtime, Auswahl der Methoden usw., das Objekt hat dazu keine Informationen, keine Initialisierung,
jeder Aufruf, jeder Code am Ende in Maschinencode, gewiss, aber nichts in der Hinsicht dass ein Objekt irgendwelche Adressen initialisiert wissen muss…
eine Spielerei zu Konstruktoren noch:
public class Test {
public Test() {
Test2 t2 = (Test2) this;
t2.c = t2.a + t2.b;
}
public static void main(String[] args) {
new Test2();
}
}
class Test2 extends Test {
final int a = 4;
int b = 4;
int c;
final int d = c;
Test2() {
super();
System.out.println("log: " + a + " - " + b + " - " + c + " - " + d);
}
}
Ausgabe 4 - 4 - 4 - 4
bevor der Konstruktor der Oberklasse drankommt ist Zugriff wohl wirksam verhindert, außer vielleicht mit Reflection-Gemeinheiten,
bei Ausführung bzw. zu Beginn des Oberklasse-Konstruktors ist die finale Variable a der Unterklasse auch schon initialisiert,
nicht aber finales d, von anderen abhängig,
nicht-finales b trotz gleicher fester Zahl wie a auch noch nicht initialisiert,
die Oberklasse kann c setzen (in einer Berechnung mit b noch als 0) und damit dem finalen d einen anderen Stand geben als wenn nicht eingegriffen…
würde c als “int c = 3;” definiert werden, würden die Änderungen an c durch die Oberklasse mit diesem Wert 3 überschrieben werden, sobald die Unterklasse ihre Hauptinitialisierungsrunde beginnt…
eine Menge Stolperfallen, aber nur bei nicht zu empfehlenden Umgang, im Normalfall kaum Problem