如何在不执行超类方法的情况下获取超类方法的返回值?

时间:2015-02-09 03:50:26

标签: java equals hierarchy

这是我的超类equals()方法:

public boolean equals(Object other){
    Car c = (Car)other;
    if(this.make.equals(c.make) && this.model.equals(c.model)){

        System.out.println("True, Cars are equal");
        return true;
    }

    else 
        System.out.println("False, Cars are not equal");
    return false;

}

这是我的子类equals()方法:

public boolean equals(Object other) {
    GreenCar g = (GreenCar) other;
    if(super.equals(g)==true){

        if (this.type.equals(g.type)) {
            System.out.println("True, Cars are equal");
            return true;
        } else {
            System.out.println("False, Cars are not equal");

            return false;
        }
    }
    else
        System.out.println("False, Cars are not equal");
    return false;
}

当它在if(super.equals(g)==true){运行检查时,它会执行该方法并输出true或false。我怎样才能检查返回值?

3 个答案:

答案 0 :(得分:1)

如果不打印任何内容,就无法运行该方法。

这就是为什么你的大多数方法不应该具有“副作用”(比如在屏幕上打印东西)。

println两种方法中删除equals次来电。将它们添加到调用equals的代码中。

答案 1 :(得分:0)

就像人们说过你需要取出那些println的时候,如果你想让它在你打电话时不打印,因为每次你打电话给它时都会打印出来。

就像一个注释一样,你可以通过取出那些方法来缩短你的一些方法,因为如果条件为真,它将在返回下一个代码体之前返回。例如

public boolean equals(Object other){
    Car c = (Car)other;
    if(this.make.equals(c.make) && this.model.equals(c.model))//if this is true
        return true;//the method ends here
    return false;//if the method hasn't ended yet then the conditional must be false
 }

另外我注意到你使用了if(super.equals(g)==true)但是如果你只是放if(super.equals(g))它会产生相同的效果,因为你输入了一个布尔值,它会检查布尔值是否为真。如果你希望得到if((boolean)==false)的效果,你可以if(!(boolean)),因为它会检查该布尔值的反面是否为真。

答案 2 :(得分:0)

super课程中,您可以编写类似

的内容
protected boolean equals(Object other, boolean debug) {
    if (other instanceof Car) {
        Car c = (Car) other;
        if (this.make.equals(c.make) && this.model.equals(c.model)) {
            if (debug) {
                System.out.println("True, Cars are equal");
            }
            return true;
        }
    }
    if (debug) {
        System.out.println("False, Cars are not equal");
    }
    return false;
}

然后你可以修改你的equals()方法(仍在super类中),如

public boolean equals(Object other) {
    return equals(other, true); // <-- default to debug.
}

接下来,您的subclass应该调用带有debug标记的版本,如

if (super.equals(g, false)) { // you don't need == true

或者,您可以使用Logger并根据需要启用和停用debug