我可以在每个对象上使用contains方法吗?

时间:2016-04-19 17:22:25

标签: java methods contains

contains方法可以用在我自己编写的类的实例上吗?

我已经创建了一个名为Ana的类,而在另一个类中,我创建了两个名为cookiemaccaroni的实例。这是其中之一:

Ana cookie = new Ana(cc.c, 20, 450);

在某些时候我试图调用

if (maccaroni.contains(cookie.image(), cookie.xi(), cookie.yi())
{
    return true;
}

但Netbeans强调它表明存在错误。当我盘旋它时,它说:

no suitable method found for contains(Image,int,int)
    method Component.contains(int,int) is not applicable
      (actual and formal argument lists differ in length)
    method Component.contains(Point) is not applicable
      (actual and formal argument lists differ in length)
    method JComponent.contains(int,int) is not applicable
      (actual and formal argument lists differ in length)

为什么以下代码被Netbeans视为错误?

这是我所指的课程。

import java.awt.Graphics;
import java.awt.Image;
import javax.swing.JComponent;

public class Ana extends JComponent
{
    public static Image p;
    public static int xx;
    public static int yy;

    public Ana(Image io, int x, int y)
    {
        p = io;
        xx = x;
        yy = y;
        repaint();
    }

    @Override
    public void paint(Graphics g)
    {
       g.drawImage(p, xx, yy, null);
    }


    public Image image()
    {
        return p;
    }

    public int xi()
    {
        return xx;
    }

    public int yi()
    {
        return yy;
    }
}

1 个答案:

答案 0 :(得分:3)

contains()中没有定义Ana方法。 contains()中定义了JComponent方法。它需要两个整数。你试图用图像和两个整数来调用它。您可以通过这样编写来获得所需内容:

if (maccaroni.contains(cookie.xi(), cookie.yi())
{
    return true;
}

因此,此代码中的错误类型是:它是编译错误。 NetBeans不只是强调它,屏幕上的某个地方会显示一条消息,告诉您哪里出了问题。您可能必须将鼠标悬停在下划线上或查看屏幕的其他部分 - 我不会定期使用NetBeans,所以我不记得确切 - 但我向您保证信息就在那里。

不,你不能在任何对象上调用contains(),只能在类定义contains()方法(具有适当参数)的对象上,或者继承这样的对象来自其中一个超类型的方法(来自他们实现的祖先类或接口)。

所有对象都可以使用的方法是从java.lang.Object类继承的方法,因为所有类都显式或隐式地扩展它(父类的父类的父类...最后需要扩展Object类) 。

contains(Image, int, int)上没有定义java.lang.Object方法。 contains()类的实例可用的唯一Ana方法是从JComponent继承的contains(int, int)int。如您所见,它接受两个Image参数,这会阻止您将其与其他p参数一起使用。

顺便说一下,正如@PShemo所说,您的字段xxyyprivate可能应该是static,而且肯定不是 #!/usr/bin/env python list1 = [ 'one', 'two', 'three' ] list2 = [ 'I', 'II', 'III', 'IV', 'V' ] for word in list1: print word + " from list1" for roman in list2: print roman + " from list2" for ( word, roman ) in (list1 list2): if word: print word + " from list1" if roman: print roman + " from list2"