gpt4 book ai didi

Java:即使存在构造函数方法,类 Rectangle 中的构造函数 Rectangle 也无法应用于给定类型?

转载 作者:行者123 更新时间:2023-12-01 18:41:22 27 4
gpt4 key购买 nike

Rectangle 类扩展了 ClosedShape 类。当我尝试创建 Rectangle 的实例时,出现编译器错误:

constructor Rectangle in class Rectangle cannot be applied to given types;
      mine = new Rectangle (10, 50, 90, 50);
   required: no arguments
   found: int, int, int, int
   reason: actual and formal arguments lists differ in length

但是我试图调用的构造函数确实存在!为什么会这样?请参阅下面的代码:

ClosedShape.java:

import java.awt.Graphics;

public abstract class ClosedShape extends Shape {
boolean polygon;
int numPoints;
int[] xVertices;
int[] yVertices;
int x, y, width, height;

public ClosedShape () {}

public ClosedShape(boolean isPolygon, int numPoints) {
super(0,0);
this.polygon = isPolygon;
this.numPoints = numPoints;
}

public ClosedShape(boolean isPolygon, int numPoints, int[] x, int[] y) {
super(x[0],y[0]);
this.polygon = isPolygon;
if (isPolygon) {
this.numPoints = numPoints;
xVertices = new int[numPoints]; // error check? if x.length == numPoints
//for (int i = 0; i < x.length; i++) { // make copy of array: why?
// xVertices[i] = x[i];
//}
yVertices = new int[numPoints]; // error check? if y.length == numPoints
for (int i = 0; i < y.length; i++) { // make copy of array
yVertices[i] = y[i];
}
}
else { // its an oval - define bounding box
this.numPoints = 4;
this.x = x[0];
this.y = y[0];
width = x[1];
height = y[1];
}
}

public void setXYCoords(int[] x, int[] y){
this.xVertices = x;
this.yVertices = y;
}

// Gives access to the width attribute
public void setWidth(int width){
this.width =width;
}

// Gives access to the height attribute
public void setHeight(int height) {
this.height =height;
}

public void draw(Graphics g) {
if (polygon) {
g.drawPolygon(xVertices, yVertices, numPoints);
}
else {
g.drawOval(x, y, width, height);
}

}

public abstract double Area();
public abstract double Perimeter();
}

矩形.java:

public class Rectangle extends ClosedShape {

public void Rectangle(int x, int y, int width, int height) {
super(true, 4);
}

public double Area() {
return 0.0;
}

public double Perimeter() {
return 0.0;
}
}

DrawingFrame.java(测试器类):

import java.awt.*;
import javax.swing.Timer;

public class DrawingFrame extends javax.swing.JPanel {
public DrawingFrame (int w, int h) {
setFocusable(true);
setBackground(Color.black);
setSize(w,h);
}

protected void paintComponent(Graphics g) {
super.paintComponent(g);

//tester : Remove comments to test classes
Shape mine;
g.setColor(Color.red);
mine.draw(g);

mine = new Rectangle(10, 50, 90, 50);
g.setColor(Color.yellow);
mine.draw(g);
}
}

这是 Shape.java,以防您需要:

import java.awt.*;

public abstract class Shape {

int initX, initY;
Color fillColour;

public Shape() {
initX = 0;
initY = 0;
fillColour = null;
}

public Shape(int x, int y) {
initX = x;
initY = y;
}

public void setInitX (int x) {
initX = x;
}

public void setInitY (int y) {
initY = y;
}

public abstract void draw(Graphics g);
public abstract double Area();
public abstract double Perimeter();
}

最佳答案

java.awt 包中有一个类,也称为 Rectangle ( Rectangle API )。因此,Java 认为您想要创建一个 java.awt.Rectangle,它有一个不接受任何参数的构造函数,而不是您的自定义 Rectangle 类。

可以通过三种方法解决此问题:

  1. 不要导入java.awt(你似乎并没有使用它)
  2. 将您的类重命名为 Rectangle 以外的名称
  3. Retangle 类放入包中,并在创建 Rectangle 时使用完整的包名称。例如,如果您将 Rectangle 类放入包 myshapes 中,您可以使用 new myshapes.Rectangle(10, 50 创建一个新的 Rectangle , 90, 50);

关于Java:即使存在构造函数方法,类 Rectangle 中的构造函数 Rectangle 也无法应用于给定类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19871686/

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