2011-09-19 55 views
-2

内调用父类方法,我有一个类Mouse扩展类Mammal。在Mouse,我有这需要在作为参数MouseArrayList的目的,这样的静态方法:麻烦从子类的静态方法

public static void mate(ArrayList<Mouse> mice) 

这里面静态方法,我有这行代码:

if((mice.get(i).getIsMale^mice.get(j).getIsMale) && (mice.get(i).getAge > 1) && (mice.get(j).getAge > 1)) 
    //if either mouse is male but not both and if both are older than 1 day 

其中getIsMalegetAge是在超类中定义的哺乳动物的方法i,并和j是变量我静态mate方法内使用。

我从上面行的编译器4个错误:无法找到象征。每个getIsMale一个getAge

我会很感激任何(快速)的帮助。我必须提交这份任务并入睡。谢谢!

回答

2

快速应答(:-P):你必须加上括号,以便它的getIsMale()getAge()。所有函数都必须用括号括起来,用Java来调用。

时尚点评:布尔干将通常应被命名为isXXX,不getXXX,所以你male吸气应该命名为isMale,不getIsMale

2

这是你的代码:

if ((mice.get(i).getIsMale^mice.get(j).getIsMale) && 
    (mice.get(i).getAge > 1) && 
    (mice.get(j).getAge > 1)) { 
    // ... 
} 

,这是书面的方式,你说“给我的场getIsMale的价值”等。它getAgegetIsMale不是字段:它们是方法。所以,你必须呼叫他们:

if ((mice.get(i).getIsMale()^mice.get(j).getIsMale()) && 
    (mice.get(i).getAge() > 1) && 
    (mice.get(j).getAge() > 1)) { 
    // ... 
} 

(即Java编译器说“找不到符号”,而不是“它是一个场”的原因是,字段名和方法名是不同的名字空间。如果你可以写一个既有字段foo又有foo方法的类,所以......编译器告诉你它看到的错误,而不是试图猜测你实际上的意思。 )


小问题:JavaBeans约定说getter f或者布尔属性应该被称为isXxx而不是getXxx。您应该重命名getIsMale()isMale()

+0

+1也提出了布尔getter命名约定。 ;-)(实际上我比你更快地提高了你的速度,但这恰好是我的一个秘密,所以当其他人强化这一点的时候,它很好。:-)) –

+0

上帝,我一直在挠挠我的头,这么长时间试图找出什么是错的,而支架没有发生,我在所有。谢谢你的回复! –