我们新建了两个对象,a1和a2的结果应该是相同的,为什么a2中的sum值会是20呢?

定义一个A类,   

A{
  private static int sum=0;
  public static void addAuto(){sum=sum+10;}
  }

  然后定义B和C类,B extends A{}, C extends A{};  B和C类和A相同。
  这是我们用A的对象引用B C的对象(根据多态性):

A a1=new B();A a2=new C();
  a1.addAuto();System.out.println(a1.sum);//结果为10
  a2.addAuto();System.out.println(a2.sum);//结果为20 ???
  

每调用一次addAuto就会加10
因为你用的是A的对象引用的

private static int sum=0;
sum是静态的啊,它会保留上一次执行的结果
换句话说,sum这个变量并不是在a1和a2里的,它就是在A里的,全局只有1个