有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

类的java方法未定义

我试图在eclipse中运行一段代码,该代码使用一个名为getArea(对象)的方法。我现在得到一个错误,说

The method getArea(ComparableRectangle) is undefined for the type RectangleTest

这是矩形测试的代码-

package geometry;
import java.awt.Rectangle;

public class RectangleTest extends Rectangle {
/**
 * 
 */
    private static final long serialVersionUID = -3282103336310735942L;

    public static void main(String args[]) {
        ComparableRectangle rect01 = new ComparableRectangle(5, 4);
        ComparableRectangle rect02 = new ComparableRectangle(6, 8);
        System.out.println("Area: " + getArea(rect01));

    }
 }

这是可比矩形的代码

package geometry;

import java.awt.Rectangle;

public class ComparableRectangle extends Rectangle implements Comparable {
    private int width;
    private int height;
    public ComparableRectangle(int w, int h) {
         width = w;
         height = h;
     }
     public double getArea(ComparableRectangle rect) {
         return width*height;
     }
     public boolean compareTo(ComparableRectangle rect1, ComparableRectangle rect2) {
         if(rect1.width == rect2.width && rect1.height == rect2.height) {
             return true;
          }
         else {
             return false;
         }
     }
    @Override
    public int compareTo(Object o) {
        // TODO Auto-generated method stub
        return 0;
    }
}

如何澄清rect01是一个可比较的矩形


共 (1) 个答案

  1. # 1 楼答案

    您误解了方法及其参数的工作原理

    您需要某种方法将该方法与它应该被调用的某个对象结合起来。目前,可以使用对象作为参数,但这是不正确的

    你应该通过写作把目的和方法结合起来

    obj.method();
    

    因此,您应该像这样调用该方法

    rect01.getArea();
    

    并从方法中删除该参数

    public double getArea() { ... }
    

    参数可用于为方法提供途中的附加信息。一个很好的例子是compareTo方法,它应该比较当前实例和给定实例。打个电话看起来像

    rect01.compareTo(rect02);
    

    方法签名是

     public int compareTo(Object o)
    

    请注意,它只有一个参数,因为当前实例对该方法是隐式已知的(this关键字)


    笔记

    不需要额外的定制compareTo方法,顺便说一句,它应该被命名为compare,应该是static,因为它不绑定到任何实例

    还要注意,您的自定义compareTo方法是而不是比较。它只返回相同的不相同的。但是对于一个订单,你需要小于大于等于。因此,您的方法不定义顺序