繁体   English   中英

为什么this.hashCode()和super.hashCode()在子类中返回相同的值?

[英]why this.hashCode() and super.hashCode() returns the same value in subclass?

class A {

}

class B extends A {

    void m1(){       
        System.out.println(this.hashCode());    // Line 1
        System.out.println(super.hashCode());   // Line 2 
        System.out.println(new A().hashCode()); // Line 3    
    } 
}

class Test {

    public static void main(String[] args) {
        B bobj=new B();
        bobj.m1();
    }
}

我在这里有点困惑,因为我在第1行和第2行获得了相同的hashCode值,而第3行则给出了不同的hashCode。

您的两个类都不重写hashCode() ,因此与thissuper都调用完全相同的方法。

第三行给出了不同的哈希码,因为它是在不同的对象上调用的,但是所调用的方法还是与前两行相同。

您正在从Object类中调用默认的hashCode()方法,因为已对其进行了覆盖。 因此,没关系,您从子类或超类调用,它在内部调用Object的类hashCode()方法。

第三者不同的原因,这是新对象的要求。 而且它具有不同的虚拟内存地址,并且Object类的hashCode()方法将其返回

this是指当前类对象,而super是指直接父类对象,因此两者是不同的。

没有单独的“父对象”。 它是类B的一个对象。因为类B扩展了类A,所以B的任何实例也是A的有效实例,但它仍然只是一个对象。

例:

class A {
    Object getA() { return this; }
}

class B extends A {
    Object getB() { return this; }
}

class Test {
    public static void main(String[] args) {
        B obj = new B();
        if (obj.getA() == obj.getB()) {
            System.out.println("Same object");
        } else {
            System.out.println("Different objects");
        }
    }
}

输出: Same object ,显示出this对象所看到A的方法和通过B的方法所看到的是一样的。

因此,hashCode也是如此。

仅当重写方法时,使用super才区分调用哪个方法实现。 它不能访问其他对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM