Welchen Vorteil hätte man denn hierdurch?
Du kannst es beliebig ändern. Es spielt keine Rolle, was Du da zurück gibst - so lange es eine Collection ist!
Erstes Beispiel von Dir:
children kann dabei jede Art von Collection sein.
Ja, aber du musst es durch einen Konstruktor jagen. Und zwar genau diesen Konstruktor (oder einen Code, der eben eine ArrayList zurück gibt).
==> Dieses Detail ist und bleibt somit vorgegeben!
==> Dadurch ist das, was zugrunde liegt, nicht mehr änderbar. Also dieses typische "getChildren().add(...)" (was ich für eine Unart halte, aber das ist erst einmal egal).
Wenn es nur Collection oder List ist, dann kann da auch ein List.of(...) sein, was eine List$ListN oder List$List12 zurück gibt. Oder eine Methode, die keine ArrayList sondern z.B. eine Arrays$ArrayList zurück gibt oder oder oder ...
Du limitierst Dich, was die Rückgabe angeht. Und das ist eines der generellen Kernthemen bei der Objektorientierung und den SOLID Principles und und und ... das findet sich eigentlich an vielen Stellen. Auch im Patterns Buch, auf das hier immer wieder verwiesen wird im Forum, wird dies angesprochen ("Head First Design Patterns" bzw. "Entwurfsmuster von Kopf bis Fuß").
Klar kannst Du es so machen. Aber es macht einfach keinen Sinn. Selbst innerhalb der Klasse wirst du ja vermutlich/hoffentlich auch eher etwas haben wie:
private List<Node> children;
und damit selbst da auf eine konkrete Klasse verzichten.
Also ich will Dir da nichts vorgeben! Du kannst da so verfahren, wie Du es für richtig hältst. Alles, was ich machen kann und will ist meine Sicht vorstellen und Gründe nennen, wieso ich so verfahre.
Vielleicht hilft auch eine andere Sichtweise: Ich will bei einer Methode bestimmte Informationen zurück geben. Das kann dann sein, dass ich eine Liste von Elementen zurück geben will. Das ist dann also eine Menge von Elementen eines bestimmten Typs in einer bestimmten Reihenfolge.
Was für wichtige Informationen liefert die ArrayList gegenüber der List, die an der Stelle relevant sind?
Klar: Wenn es relevante Informationen gibt, die ich bei der Rückgabe einer List verlieren würde, dann wäre hier tatsächlich eine ArrayList richtig und eine List falsch. Diese Frage musst Du aber beantworten können bei der Auswahl des Rückgabetyps.