Q1:
class Super {
  public int field = 0;
  public int getField() { return field; }
}class Sub extends Super {
  public int field = 1;
  public int getField() { return field; }
  public int getSuperField() { return super.field; }
}public class FieldAccess {
  public static void main(String[] args) {
    Super sup = new Sub(); // Upcast,运行结束时,sup含有2个field,一个为自己的field,另一个为父类的field.
    System.out.println("sup.field = " + sup.field + //这个比较困惑.
      ", sup.getField() = " + sup.getField());
    Sub sub = new Sub();
    System.out.println("sub.field = " +
      sub.field + ", sub.getField() = " +
      sub.getField() +
      ", sub.getSuperField() = " +
      sub.getSuperField());
  }
} /* Output:
sup.field = 0, sup.getField() = 1
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0Q2:
If a method is static, it doesn’t behave polymorphically:
class StaticSuper {
  public static String staticGet() {
    return "Base staticGet()";
  }
  public String dynamicGet() {
    return "Base dynamicGet()";
  }
}class StaticSub extends StaticSuper {
  public static String staticGet() {
    return "Derived staticGet()";
  }
  public String dynamicGet() {
    return "Derived dynamicGet()";
  }
}public class StaticPolymorphism {
  public static void main(String[] args) {
    StaticSuper sup = new StaticSub(); // Upcast
    System.out.println(sup.staticGet()); //根据编译器观察,此处的sup是一个StaticSub类型.不解!
    System.out.println(sup.dynamicGet());
  }
} /* Output:
Base staticGet()
Derived dynamicGet()
*///:~
虽然说上面这些可能在实际应用中用到的可能性不是很大,但还是希望求解!!