JAVA——多态

来源:互联网 发布:手机淘宝排行榜 编辑:程序博客网 时间:2024/06/02 07:17

1、多态性
(1)多态:同一个对象在不同时刻体现出来的不同状态。

(2)多态的前提:
  A:有继承或者实现关系。
  B:有方法重写。
  C:有父类或者父接口引用指向子类对象。
  
(3)多态的分类:
  a:具体类多态
    class Fu {}
    class Zi extends Fu {}
    Fu f = new Zi();
  b:抽象类多态
    abstract class Fu {}
    class Zi extends Fu {}
    Fu f = new Zi();
  c:接口多态
    interface Fu {}
    class Zi implements Fu {}

(4)多态中的成员访问特点(子类与父类拥有相同的东西时)
  A:成员变量
    编译看左边(父类),运行看左边(父类)
  B:构造方法
    子类的构造都会默认访问父类构造
  C:成员方法
    编译看左边(父类),运行看右边(子类)【原因:方法有重写,子类把父类方法重写掉了,如果没有重写依旧看父类】
  D:静态方法
    编译看左边(父类),运行看左边(父类)

(5)多态的好处:
  A:提高代码的维护性(继承体现)
  B:提高代码的扩展性(多态体现)
  
(6)多态的弊端:父不能使用子的特有功能。
    现象:子可以当作父使用,父不能当作子使用。
    
(7)多态中的转型
  A:向上转型:从子到父(多态)
     
  B:向下转型:从父到子
     用处:当想要使用子类的特有功能时
     方法:a. 创建子类对象调用方法即可
            Son son = new Son() ;
         缺点:不合理,并且占用内存。
        b.父类的引用强制转换为子类的引用(向下转型)
        Son son = (Son) father ; //son与father两个对象同时指向一块内存,节省空间

(8)多态在内存中的图解

这里写图片描述

(9)多态中对象变化内存图解

图中的ClassCastException错误提醒表示类型转换异常,一般出现在多态的向下转型中

0 0