方法重写

yas*_*ash 3 java


class A
{
  int i=10;
  void show()
  {
    System.out.println("class A");
  }
}

class B extends A
{
  int i=5;
  public void show()
  {
    System.out.println("class B");
  }
}
class M
{
  public static void main(String s[])
  {
    A a=new B();
    a.show();
    System.out.println(a.i);
  }
}


OUTPUT= class B
        10

Run Code Online (Sandbox Code Playgroud)

如果A类方法被B类方法覆盖那么为什么变量'i'?

vav*_*ava 5

因为变量不是虚拟的,所以只有方法.


Zed*_*Zed 5

它不会被覆盖,而是被隐藏.在您的输出中,您特别请求了ai的值,而不是((B)a).i.