方法未定义为类

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了方法未定义为类相关的知识,希望对你有一定的参考价值。

我试图在eclipse中运行一个使用名为getArea(一个对象)的方法的代码。我目前收到错误说

对于getArea(ComparableRectangle)类型,方法RectangleTest未定义

这是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));

    }
 }

这是ComparableRectangle的代码。

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是一个可比较的矩形?

答案

在像JavaC++这样的面向对象语言中调用类方法需要一个该类的实例,我们也称之为从该类实例化的object。所以你必须像下面这样调用你的方法: -

 rect02.getArea(rect01);
 rect01.getArea(rect02);

因为getArea(ComparableRectangle rect)是类ComparableRectangle的成员函数或方法,所以你需要它的实例来调用它。以下是该类rect01和rect02的两个实例。

祝好运!

另一答案

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

您需要某种方法将该方法与应该调用的某个对象相结合。目前,您通过将对象用作参数来执行此操作,但这不正确。

你应该通过写作来组合对象和方法

obj.method();

因此,您应该调用方法

rect01.getArea();

并从方法中删除参数

public double getArea() { ... }

参数可用于为方法提供有关方法的附加信息。一个很好的例子是compareTo方法,它应该将当前实例与给定实例进行比较。电话会是这样的

rect01.compareTo(rect02);

方法签名是

 public int compareTo(Object o)

请注意,它只有一个参数,因为该方法隐含了当前实例(this关键字)。


笔记

没有必要额外的自定义compareTo方法,顺便说一句应该命名为compare,并且应该是static,因为它没有绑定到任何实例。

另请注意,您的自定义compareTomethod不是比较。它只是返回相同或不相同。但对于一个订单,你需要少于,大于和等于。因此,您的方法不会定义订单。

以上是关于方法未定义为类的主要内容,如果未能解决你的问题,请参考以下文章

未调用自定义适配器 getView() 方法

getSupportFragmentManager() 在活动扩展片段中未定义

没有为类'Person'定义方法'set_age'。飞镖

在 Python 3 中获取未绑定方法对象的定义类

类组件中的 UseRef。画布未定义

VSCode自定义代码片段—— 数组的响应式方法