代码之家  ›  专栏  ›  技术社区  ›  Alpit Anand

为什么在Java中发生这种情况?[副本]

  •  1
  • Alpit Anand  · 技术社区  · 7 年前

    这个问题已经有了答案:

    我知道Java已经有一段时间了,我认为我缺乏基本概念。下面是我要运行的代码:

       class A{
        int x =10;
        void al(){
            System.out.println("From a");
        }
    }
    class B extends A{
        int x = 20;
        void al(){
            System.out.println("From b");
        }
    
        public static void main(String args[]){
            A obj = new B();
            B obj1 = new B();
            A obj2 = new A();
            System.out.println(obj.x);
            obj.al();
            System.out.println(obj1.x);
            System.out.println(obj2.x);
        }
    }
    

    下面是输出:

      10
    From b
    20
    10
    

    当我试图调用函数时 它调用函数 B 类。这里正在进行简单的覆盖。obj试图先在基类中找到,然后在超类中找到。 现在,当我尝试按对象访问“x”时 对象 显示“10”。 为什么不显示“20”?

    3 回复  |  直到 7 年前
        1
  •  4
  •   Michael    7 年前

    System.out.println(obj.x);

    obj A obj.x x dynamic dispatch

    hidden

    class A {
        int x = 10;
    }
    class B extends A{
        int x = 20;
    }
    

    B

        2
  •  2
  •   Sébastien Palud    7 年前

        3
  •  1
  •   Shanu Gupta    7 年前

    variables