Java中的子类

0 java subclass

我的朋友给了我这个任务,我正在努力与最后一个,它要求我:

"实现一个名为Square的类,表示一个正方形.类Square必须从Rectangle派生.确保覆盖toString()."

我甚至不认为我接近它,但任何帮助都会很棒

Rectangle.Java

public class Rectangle {

    public double width;
    public double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    public double getArea() {
        return width * height;
    }

    public double getPerimeter() {
        return 2*width+2*height;
    }

    @Override
    public String toString() {
        return "Rectangle[width "+width+",height "+height+"]Area:"+getArea()+",Perimeter:"+getPerimeter();
    }

     public static void main(String[] args) {

        double width = (10);
        double height = (10);
        Rectangle rectangle = new Rectangle(width, height);
        System.out.println(rectangle);

    }
}
Run Code Online (Sandbox Code Playgroud)

Sqaure.java

public class Sqaure extends Rectangle {

      private final double width, height, area, perimeter;

      public Sqaure(double width, double height) {
        this.width = width;
        this.height= height;
      }

      public static void main(String[] args) {    
        double width = (10);
        double height = (10);
        Sqaure sqaure = new Sqaure(width, height);
        System.out.println(square);
      }
}
Run Code Online (Sandbox Code Playgroud)

Ste*_*ein 5

没有必要覆盖超过构造函数和toString().由于正方形只是一个具有相等边长的特殊矩形,您可以将它们初始化为相同的值,并且所有其他方法将按预期工作:

public class Square extends Rectangle {

  public Square(double width) {
    super(width, width);
  }

  @Override
  public String toString() {
      return "Square[width:" + width + "]Area:" + getArea() +
          ",Perimeter:" + getPerimeter();
  }
Run Code Online (Sandbox Code Playgroud)

请注意,在现实世界中,您可能不会在这种情况下使用继承,因为这会引入一些歧义 - 您仍然可以使用矩形构造函数创建正方形,并且人们可能会误导使用instanceof检查来确定给定的矩形是一个正方形.相反,可能会添加一个参数构造函数并检查toString中的宽度/高度等效性.