Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java对象比较和继承_Java_Object_Inheritance_Comparison - Fatal编程技术网

java对象比较和继承

java对象比较和继承,java,object,inheritance,comparison,Java,Object,Inheritance,Comparison,需要你帮我解答一个练习题吗 如何修改Lower Bar类,使o.equals(0)返回false,不允许重写从超类继承的equals() public class Scratchpad { public static void main(String[] args) { Bar o = new Bar(); System.out.println(o.equals(o)); } } class Foo { public boolean

需要你帮我解答一个练习题吗

如何修改Lower Bar类,使o.equals(0)返回false,不允许重写从超类继承的equals()

 public class Scratchpad {
    public static void main(String[] args) {
        Bar o = new Bar();
        System.out.println(o.equals(o));

    }
}

class Foo {
    public boolean equals(Object o) {
        return this == o;
    }
}

class Bar  extends Foo{

}

不确定这是否是您要查找的内容,但您可以重载
equals

class Bar extends Foo{    
    public boolean equals(Bar b){
        return false;
    }
}

不确定这是否是您要查找的内容,但您可以重载
equals

class Bar extends Foo{    
    public boolean equals(Bar b){
        return false;
    }
}

你为什么要这么做?我想您可以在
Foo
中使用以下内容,但它打破了许多好的设计原则,如果其他人需要使用您的代码,以后可能会导致奇怪的行为

public final boolean equals(Object o) {
    return o.getClass() == Foo.class && this == o;
}
注:这也违反了以下合同:

它是自反的:对于任何非空参考值x,x.equals(x)应该返回true


你为什么要这么做?我想您可以在
Foo
中使用以下内容,但它打破了许多好的设计原则,如果其他人需要使用您的代码,以后可能会导致奇怪的行为

public final boolean equals(Object o) {
    return o.getClass() == Foo.class && this == o;
}
注:这也违反了以下合同:

它是自反的:对于任何非空参考值x,x.equals(x)应该返回true



确实要
o.equals(o)
返回false吗?这是一个学术练习吗?@NG考虑到操作的第一行,这是一个安全的赌注。所以你想知道:我如何在不重写equals的情况下重写equals?是的,这是一个学术练习,下面是完整的问题,如果它有帮助//一个类Foo有一个方法boolean equals(Object o),它只返回测试的答案this==o。创建一个子类Bar,以便在声明Bar后b=new Bar();调用b.equals(b)返回false。为了解决这个问题,不允许重写从超类Foo继承的equals方法。这太糟糕了,我能问一下这个练习是从哪里来的吗?说o不等于o违反了任何和所有的惯例。答案是,您必须按照Jeffrey所说的那样编辑Foo类,但这样做是令人震惊的。您确定要
o.equals(o)
返回false吗?这是一个学术练习吗?@NG考虑到操作的第一行,这是一个安全的赌注。所以你想知道:我如何在不重写equals的情况下重写equals?是的,这是一个学术练习,下面是完整的问题,如果它有帮助//一个类Foo有一个方法boolean equals(Object o),它只返回测试的答案this==o。创建一个子类Bar,以便在声明Bar后b=new Bar();调用b.equals(b)返回false。为了解决这个问题,不允许重写从超类Foo继承的equals方法。这太糟糕了,我能问一下这个练习是从哪里来的吗?说o不等于o违反了任何和所有的惯例。答案是,您必须按照Jeffrey所说的那样编辑Foo类,但这样做太可怕了。如果您执行类似于
Object o=new Bar();o、 等于(o)这种覆盖不是等于()吗?不,是重载,这是另一回事。我很确定这是正确的答案。@user3363135不,这是一个重载。这就是为什么如果使用Jeffrey提供的代码片段,它就不起作用,因为它将调用Foo类中的equals方法。然而,看看你的作业,我相信这是唯一的方法。如果你做一些像
Object o=new Bar();o、 等于(o)这种覆盖不是等于()吗?不,是重载,这是另一回事。我很确定这是正确的答案。@user3363135不,这是一个重载。这就是为什么如果使用Jeffrey提供的代码片段,它就不起作用,因为它将调用Foo类中的equals方法。但是看看你的作业,我相信这是唯一的方法。