Java的多态

来源:互联网 发布:淘宝上图片多大尺寸 编辑:程序博客网 时间:2024/05/22 06:06
多态的基础知识
1.什么是多态
  Programmer pro = new English();
  创建一个子类对象,赋给父类的引用变量,通过父类的引用调用方法时,如果子类重写了,调用的是子类的
  子类不同,输出结果不同,多种形态
  多态只和方法有关,和属性无关
  Programmer pro = new English();
  编译的类型                         运行时的类型
 2.多态的好劣
   1.减少了重载方法的数量
                  2.符合开闭原则,即使增加子类,不需要提供额外的方法

                  3.不能使用子类特有的方法(除非向下转型)

                  4.父子类具有相同的成员变量时,也只能调父类的成员变量。

 3.多态的前提
  1.继承是多态的前提
  2.子类重写父类的方法
   3.将子类的对象赋给父类的引用
                调用重写的方法即可多态
 
  4.多态的使用场合
  1.使用父类做方法的形参,实参可以是任意的子类类型(最主要的场合)
  2.使用父类做方法的返回值类型,实际返回的可以是任意子类的对象
 5.你见过的多态
   public boolean equals(Object obj) {}
   Object做方法的形参

  实参可以任意类型


向下转型 


1.    Programmer  pro = new Chinese();   Chinese ch = (Chinese)pro; 强制转换
 2.向下转型后就可以调用子类特有的方法了
 3.不是做手术,必须转换成真实子类型,否则ClassCastException:
 4.向下转型之前肯定发生了向上转型 正确
 5.为了避免ClassCastException,向下转型之前先判断一下instancof
  pro instanceof Italian
 对象    instanceof  类或者接口
 6.使用instancof的前提:左边的对象和右边的类型在继承树上有上下级关系


总结:

成员方法:
编译时:要查看引用变量所属的类中是否有所调用的方法。
运行时:调用实际对象所属的类中的重写方法——动态绑定。
成员变量:
不具备多态性,只看引用变量所属的类。


   参考文章:点击打开链接