无法从子类静态方法内部调用超类方法

时间:2011-09-19 02:57:08

标签: java inheritance methods

我有一个类Mouse,它扩展了类Mammal。在Mouse中,我有一个静态方法,它接收ArrayList Mousepublic 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

在这个静态方法中,我有这行代码:

getIsMale

其中getAgei是超类Mammal中定义的方法,而jmate是我在静态getIsMale方法中使用的变量。

我从上面一行的编译器中得到4个错误:找不到符号。每个getAge一个,每个{{1}}

一个

我很感激任何(快速)的帮助。我必须提交这项任务并进入睡眠状态。谢谢!

2 个答案:

答案 0 :(得分:2)

快速回答(:-P):您必须添加括号,使其为getIsMale()getAge()。必须使用括号在Java中调用所有函数。

样式注释:布尔getter通常应命名为isXXX,而不是getXXX,因此male getter应命名为isMale,而不是getIsMale。< / p>

答案 1 :(得分: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应该被称为isXxx而不是getXxx。您应该将getIsMale()重命名为isMale()

相关问题