Я пишу этот код:
Мы ориентируемся на три геометрические фигуры: круг, прямоугольник и квадрат.
Каждая из этих фигур является геометрической, следовательно, эти геометрические формы могут иметь родительский класс (geometryShape), который включает в себя общие черты этих фигур.
В то же время каждая геометрическая фигура является печатным и сопоставимым объектом, среди других объектов, которые также могут быть печатаемыми и сопоставимыми, следовательно, эти фигуры будут наследовать печатность и сопоставимость от двух интерфейсов: Printable и Comparable.
Наконец, поскольку квадрат является частным случаем прямоугольника, квадрат будет расширяться от прямоугольника в нашем дизайне.
Моя проблема - заставить квадрат принимать только одно входное значение (сторона), в то время как предполагается, что он наследует свойства прямоугольника (который принимает 2 входных значения, ширину и высоту)
Я пытался использовать конструктор без аргументов и супер-конструктор в классе Rectangle, но ни один из них не помог решить эту проблему.
Возможно ли, что проблема связана с чем-то кроме конструкторов?
код класса прямоугольника:
class Rectangle extends geometricShape {
private double width, height;
private double side;
Rectangle(){
super();
}
Rectangle (double side){
this.side=side;
}
Rectangle(double width, double height) {
super.setShapeName("Rectangle");
this.width = width;
this.height = height;
}
public void setSide(double side) {
this.side = side;
}
public double getSide() {
return side;
}
@Override
public double gerPerimeter() {
return 2 * (width + height);
}
@Override
public double getArea() {
return width * height;
}
public double getWidth() {
return width;
}
public void setWidth(double width) {
this.width = width;
}
public double getHeight() {
return height;
}
public void setHeight(double height) {
this.height = height;
}
}
код квадрата:
class Square extends Rectangle {
double side;
Square(double side) {
super.setShapeName("Square");
this.side = side;
}
public double getside() {
return side;
}
public void setside(double s) {
side = s;
}
}
Это остальная часть кода (без квадрата и прямоугольника)
public class Inheritance {
public static void main(String[] args) {
int Select;
double Value1, Value2;
String s;
geometricShape Shapes[] = new geometricShape[2];
Scanner input = new Scanner(System.in);
for (int i = 0; i < 2; i++) {
s = (i < 1) ? "first " : "second ";
System.out.println("Choose the " + s + "shape type:\n" + "(1) for a circle\n" + "(2) for a rectangle\n" + "(*) for a square"); // "*" means any other number
Select = input.nextInt();
switch (Select) {
case 1:
System.out.print("Enter the radius: ");
Value1 = input.nextDouble();
Shapes[i] = new Circle(Value1);
break;
case 2:
System.out.print("Enter the width: ");
Value1 = input.nextDouble();
System.out.print("Enter the height: ");
Value2 = input.nextDouble();
Shapes[i] = new Rectangle(Value1, Value2);
break;
default:
System.out.print("Enter the side length: ");
Value1 = input.nextDouble();
Shapes[i] = new Square(Value1);
break;
}
}
System.out.println("The larger shape is:");
if (Shapes[0].isLargerThan(Shapes[1])) {
Shapes[0].print();
} else {
Shapes[1].print();
}
}
public Inheritance() {
}
}
Сопоставимый интерфейс {
public boolean isLargerThan(E obj); // The method returns true if the self object is larger than obj }
interface Printable {
public void print();
/* For simplicity, let this method prints "A " + object name + "with area: " + shape area */ }
abstract class geometricShape implements Comparable<geometricShape>, Printable {
private String shapeName;
abstract public double gerPerimeter();
abstract public double getArea();
public String getShapeName() {
return shapeName;
}
public void setShapeName(String Name) {
shapeName = Name;
}
@Override
public boolean isLargerThan(geometricShape obj) {
return this.getArea() > obj.getArea();
}
@Override
public void print() {
System.out.println("A " + this.getShapeName()
+ " with area: " + this.getArea());
}
}
/*part 1*/
class Circle extends geometricShape {
private double radius;
Circle(double newRadius) {
super.setShapeName("Circle");
radius = newRadius;
}
@Override
public double gerPerimeter() {
return 2 * 3.14 * radius;
}
@Override
public double getArea() {
return 3.14 * radius * radius;
}
public void setradius(double r) {
radius = r;
}
public double getradius() {
return radius;
}}