方法继承

Dry*_*zav 0 java inheritance

请向我解释为什么当我编译这段代码时结果为0?怎么会这样 ?

class Parentt {
        int x = 0;
        public void printX() {
            System.out.println(x);
     }
    }
    class Child1 extends Parentt {
        int x = -1;
    }

    public class Foo {
        public static void main(String[] args) {
            new Child1().printX();
        }
    }
Run Code Online (Sandbox Code Playgroud)

Sot*_*lis 10

您无法覆盖字段,只能隐藏它们.

你的Child1.x领域正在隐藏该Parent.x领域.

字段根据访问它们的引用上的声明类型进行解析,因此

public void printX() {
    System.out.println(x); 
    // equivalent to System.out.println(this.x); where this's declared type is Parent
}
Run Code Online (Sandbox Code Playgroud)

Parent的是领域.