gpt4 book ai didi

java - 使用不同数量的参数覆盖继承的方法

转载 作者:行者123 更新时间:2023-12-01 07:44:32 25 4
gpt4 key购买 nike

有两个任务需要解决:

首先,矩形类应该继承自 GeoObjects 类。其次,正方形类应该继承自矩形类。

给出了抽象类GeoObjects。

abstract class GeoObjects{
public abstract double Perimeter();
public abstract double Surface();

public static void main (String [] argv){
double width = 4.0, height = 5.0, side= 3.0;
GeoObject rectangle = new Rectangle (width, height);
GeoObject square= new Square(side);

System.out.println ("Perimeter = " + rectangle.Perimeter());
System.out.println ("Surface= " + rectangle.Surface());
System.out.println ("Perimeter= " + square.Perimeter());
System.out.println ("Surface= " + square.Surface());
}
}

class Rectangle extends GeoObjects{

double width, height, side;

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

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

class Square extends Rectangle {

double side;

Square (double side){
this.side= side;
}
public double Perimeter (){
return 4*side;
}
public double Surface(){
return side*side;
}
}

我得到的编译器信息表明 Square 构造函数的变量数量与 Rectangle 中的变量数量不同。

如何解决这个问题而不损害 Square 必须从矩形继承而不是 GeoObjects 的要求?

最佳答案

编译器错误消息通知您,您正在尝试使用与构造函数不同数量的参数来调用 Rectangle 中的父类(super class)构造函数。您没有在 Square 中显式调用父类(super class)构造函数,因此编译器已在 Rectangle 中插入对默认父类(super class)构造函数的调用 - 实际上 super(); 作为 Square() 中的第一行。

但是Rectangle中没有不带参数的构造函数;只有一个有 2 个参数。通过将 side 传递给 super() 两次来适本地调用它。

您还会注意到,不再需要重写 PerimeterSurface 方法,因为它们现在将使用父类(super class)中的正确值。

此外,正常的 Java 方法命名约定会要求您以小写字符开头命名这些方法:perimetersurface

关于java - 使用不同数量的参数覆盖继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56117164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com