天天看點

多态的缺陷:域和靜态方法

域和靜态方法不具有多态性!!!(直接通路某個域,這個通路就将在編譯器進行解析;)

//: polymorphism/FieldAccess.java

// Direct field access is determined at compile time.

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

    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());

  }

} //:~

//: polymorphism/StaticPolymorphism.java

// Static methods are not polymorphic.

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());

    System.out.println(sup.dynamicGet());

  }

} //:~