В некотором смысле вы переопределяете поля суперкласса. Но это гораздо проще сделать случайно, потому что нет перегрузки полей (у вас есть только одна переменная с заданным именем, тип не имеет значения). Это называется переменной «скрытие» или «затенение». Итак, вы правы, в результате вы получите два поля с одинаковым именем.
Ваш второй пример верен. Они унаследованы от суперкласса и, поскольку они не объявлены закрытыми, они видны подклассу. Обычно плохая практика - обращаться непосредственно к полям суперкласса, и, если нет веских причин, они должны быть объявлены закрытыми. Ваш пример вызова супер-конструктора - лучший подход.
Кроме того, если вы скрываете поле с другим именем с таким же именем, вы все равно можете ссылаться на него как super.x, super.y, против this.x, this.y, вам следует избегать этой ситуации, если вообще возможный.