Конечно, вы можете и, как вы говорите, сделать код более читабельным и с меньшим количеством повторений:
public abstract class AShape {
private final String color;
private final int width;
private final int height;
private final int position;
public AShape(String color, int width, int height, int position) {
this.color = color;
this.width = width;
this.height = height;
this.position = position;
}
public String getColor() {
return this.color;
}
public int getWidth() {
return this.width;
}
public int getHeight() {
return this.height;
}
public int getPosition() {
return this.position;
}
}
public class Rectangle extends AShape {
private final int l1;
private final int l2;
public Rectangle(String color, int width, int height, int position, int l1, int l2) {
**super(color, width, height, position);**
this.l1 = l1;
this.l2 = l2;
}
public int getL1() {
return this.l1;
}
public int getL2() {
return this.l2;
}
}
Как видите, вы можете использовать конструктор в дочернем классе, хотя вы никогда не сможете создать экземплярТак как это абстрактно.