Сообщение компилятора достаточно ясное - в B вы эффективно получили:
public B() {
super();
}
и это не получается, потому что в Си нет конструктора без параметров для вызова. Либо введите конструктор без параметров, либо предоставьте явный конструктор в B, который вызывает конструктор в C с соответствующими аргументами.
Я не уверен, что было бы неплохо иметь все эти не приватные поля, заметьте, также не рекомендуется, чтобы поля в B скрывали поля в C. Хотите ли вы действительно экземпляр B, чтобы иметь два x
поля и два y
поля? Вы понимаете, что они будут отдельными полями, не так ли?
Если вы просто хотите эффективно предоставлять публичный доступ, вы можете получить:
public void setX(int x) {
this.x = x;
}
public int getX() {
return x;
}
(и то же самое для y
) и удалите дополнительные поля из B. Однако вы не можете изменить фактическую доступность полей в C.