Java多态的特殊特性

  最近一个阶段在学习java的多态特性,按照我个人的理解,首先多态的目的是为了更好的实现类型的兼容,其次如果子类覆盖了的方法时,如果把子类的对象赋给父类的应用,且调用父类接口的方法时,会调用子类中的方法,因为一个父类可能会有多个子类,那么在运行的过程中java是怎么知道具体是要调用那个子类中的方法的了?这个特性是由java中所谓的动态绑定的机制来保证的。就其多态本身而言不是很复杂,但是有三个比较容易绕的问题需要搞清楚,

  (1)Pitfall: “overriding” private methods 即对于父类中的private 方法,子类不能进行覆盖,且用父类的引用调用private方法时只能调用父类中的方法

  

  public class PiteFallPrivate {private void print() { System.out.println(“PeteFallPrivate…..”);}public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { PiteFallPrivate pfp = new T(); System.out.println(pfp.getClass().getName()); pfp.print();}}

  class T extends PiteFallPrivate {// @Overridepublic void print() { System.out.println(“T method output…..”);}}

  (2)Pitfall: fields and static methods 字段没有多态的特性,字段的值和应用有关系,而不会和具体的对象有关系

  

  public class PiteFallField {public static void main(String[] args) { Super sup = new Sub(); System.out.println(sup.i); System.out.println(sup.getI()); System.out.println(new Sub().getSuper()); System.out.println(new Sub().i); System.out.println(new Sub().getI());}}

  class Super {int i = 0;public int getI() { return i;}public Super() { System.out.println(“Super init….”); i = 6;}}

  class Sub extends Super {int i = 1;public Sub() { System.out.println(“Sub init….”);}public int getI() { return i;}public int getSuper() { return super.i;}}

  (3)static methods are associated with the class, and not the individual objects. static 方法的特性和字段相同

  

  public class PitFallStaticMethod {public static void print(){ System.out.println(“base static method output….”);}public void print2(){ System.out.println(“base not static method output…”);}public static void main(String[] args) { PitFallStaticMethod pfs=new StaticMethodSub(); pfs.print(); pfs.print2(); }}

  class StaticMethodSub extends PitFallStaticMethod{public static void print(){ System.out.println(“sub static method output….”);}public void print2(){ System.out.println(“sub not static method output…”);}}

打掉的应是脆弱的铁屑,锻成的将是锋利的钢刀。

Java多态的特殊特性

相关文章:

你感兴趣的文章:

标签云: