在此代码中,我分配了一个唯一的对象,但是以某种方式,我存储了x的2个副本(一个用于基类,一个用于子类)。如果对象只有一个,怎么可能?找到两个x var的空间在哪里?这是否意味着实际上创建了两个对象?

class App {

    class Base {
        public int x;

        public Base() {
            x = 2;
        }

        int method() {
            return x;
        }
    }

    class Subclass extends Base {
        public int x;

        public Subclass() {
            x = 3;
        }

        int method() {
            return x;
        }
    }

    public static void main(String[] args) {
        new App().run();
    }

    public void run() {
        Base b = new Subclass();
        System.out.println(b.x);
        System.out.println(b.method());
    }
}

最佳答案

一个x属于超类,另一个属于子类。它们具有相同的名称并不重要,您可以通过使用类限定访问表达式来访问两者:

((Base)b).x
((Subclass)b).x


(请注意,第一行的强制转换是不必要的;出于对称性考虑,我将其放入)

关于java - 存储两个具有相同名称的变量的对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18032103/

10-16 23:03