java 多态

  java引用变量有2种类型,一种是编译型类型,一种是运行时类型,编译时类型由声明该变量时使用的类型决定;运行时类型由实际赋给该变量的对象决定。如果编译时类型和运行时类型不一致,就可能出现所谓的多态。一个Person类,一个Student类,Student类继承了Person类,Person p = new Student();

  1、如果Student类重写了Person类的test方法,那么p实际调用的是Student的test方法。

  2、如果Person和Student各有一个相同的成员字段,那么p调用的是Student类的成员字段。

  3、如果Student有一个方法,而父类中没有,那么p不可以调用这个方法。这是因为java程序在编译阶段只可以调用其编译时类型所具有的方法,所以p调用Student类的特有的方法编译不过。如果p真的要调用Student独有的方法,那么需要把p强制转型为Student : (Student)p;

  4、Person p1=new Person(); p1不可以转换为Student。如果转换会报 java.lang.ClassCastException错误,向下转换只可以转换Person p = new Student()这样的p引用变量。通常先用instanceof判断一个对象是否可以强制类型转换,然后再使用(type)运算符进行强制转换。

  

 

posted @ 2018-11-14 12:05  牛牛11  阅读(93)  评论(0编辑  收藏  举报