遗产如何运作?

bar*_*ara 0 java inheritance

请帮助我理解继承是如何工作的.

如果我有两个班,父母和孩子.当我创建一个子实例时,是否构造了父类实例?

我的Parent班级代码.

public class Parent {
    private char s;

    @Override
    public int hashCode() {
        return s;
    }
}
Run Code Online (Sandbox Code Playgroud)

Child

public class Child extends Parent {
    private int i;

    public Child(int i) {
        super();
        this.i = i;
    }

    @Override
    public int hashCode() {
        return i;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后是测试

public class Main {
    public static void main(String[] args) {
        Child child = new Child(100);
        System.out.println(child.hashCode());
        System.out.println(child.getClass().getSuperclass().hashCode());
    }
}
Run Code Online (Sandbox Code Playgroud)

在输出中,我得到

100
2000502626
Run Code Online (Sandbox Code Playgroud)

所以对象的哈希是不同的.这意味着当我创建Child它的实例时也会创建它的实例Parent.我对吗?

Ken*_*ent 10

你的问题与继承无关.

100你得到child实例的hashcode()方法,如你预期.

2000502626是从Parent.class,没有Parent object.

Parent.class 有类型 java.lang.Class

parent object 有类型 Parent