Java的多态机制

一、为什么设计多态:模拟现实、代码简洁(让虚拟机完成了很多比较           判断工作)、代码维护扩展的需要

  1. 上转型【People people=new Student();】:具有父类或接口类型,但指向子类或具体类的对象,调用具体子类的方法而不调用父类的放法(原因:用于代码扩充,易于维护);
  2. Equals方法比较的是对象的引用,而不是具体值;
  3. Java中的多态是针对实例方法的,不是针对成员变量和静态方法的;
  4. 编译期多态(静态绑定):overload(参数不同,含义不同)、override(父类对象调用时,调用的是父类的方法;子类对象调用时,调用的是子类的方法),隐藏(实例变量)
  5. 运行期多态(动态绑定):上转型(一个变量指向多种类型的对象,因而调用不同对象的方法),覆盖。
  6. 覆盖(使失效):子类对象在子类内无论如何也不能调用父类实例方法,上转型也不能,只能通过super或创建父类对象来调用。
  7. Java在运行时确定对象到底是什么类型(父类还是子类)。
  8. 上转型对象调用父类的变量和静态方法,而调用子类的实例方法。
  9. 继承的表现就是多态。

  10. 采用动态绑定,意味着,虚拟机将调用对象实际类型所限定的方法,
  11. 上转型对象并不能执行所有子类实例方法,只能执行那些在父类中声明、子类中覆盖的子类方法。

二、总结

  1. Java规范中,一个方法的特征 仅包括:方法的名字、参数的数目、参数的种类;

                                                         不包括:参数名字、返回类型、抛出的异常;

     2. Main方法也可以被重载

     3. 方法覆盖和方法重载 

          相同点:都要求方法名相同、都可以用于抽象方法和非抽象方法之间

          不同点:方法覆盖要求参数名一致,重载则相反

                        覆盖要求返回类型一致,重载则不做限制

                        覆盖只能子类覆盖父类,重载用于同一个类的所有方法(包括从父类继承来的)。

                        覆盖对方法的访问权限和抛出的异常有特殊要求,重载则没有限制

                        父类的方法只能被子类覆盖一次,而一个方法在所在类中可以被重载多次。

     4. 隐藏和覆盖的区别:子类对象转化成父类对象后(上转型),能够访问父类被隐藏的变量和静态方法,但不能访问父类被                                              覆盖的实例方法。

   5 继承是子类使用父类的方法,多态是父类使用子类的实例方法。

猜你喜欢

转载自blog.csdn.net/baidu_41564215/article/details/81135416
今日推荐