Nein int cola = new Getränk() geht natürlich nicht.
Denn Getränk ist kein int. Genauso wie es andersrum eben auch nicht geht.
Das was links vom "=" steht muss vom Datentyp her übereinstimmen mit dem
Datentyp, der rechts vom "=" steht. Übereinstimmen heisst halt auch es muss sich
irgendwie davon ableiten lassen,
aber Getränk erbt ja nicht von int. (geht ja auch nicht)
Zu deinem Baby-Mensch Bsp:
Es würde nichts "passieren", du kannst beides schreiben. Der einzige Unterschied
ist eben, dass du dann die Variable "tidus" einmal als Baby interpretierst, einmal
als Mensch.
D.h. wenn du machst
Baby tidus = new Baby(2);
dann kannst du auf dieser Variablen alle Methoden vom Baby aufrufen, und auch
vom Menshc (weil jedes Baby ein Menshc ist)
Aber wenn du machst
Mensch tidus = new Baby(2);
dann ist es zwar noch immer ein Baby, aber du kannst nicht mehr Baby-eigene Methoden
aufrufen, denn nicht jeder Mensch ist ein Baby.
Also wenn es in deiner Baby-Klasse noch eine Methode nippelNuckeln() gibt, dann
kannst du die nur auf tidus aufrufen wenn der Datentyps links ein Baby war.
Wenns ein Mensch war nicht, denn Erwachsenen ist es leider gesellschaftsbedingt nicht
erlaubt, an Nippeln zu nuckeln. Zumindest nicht ohne weiteres. Was eig. sehr schade ist...