多态

多态

  • 总结:多态是一种代码现象 也是一种思想

  • 定义:一个对象,在不同时刻表现出来的多种形态

  • 前提:

    1. 存在继承/实现关系
    2. 子类重写父类方法/实现类重写接口方法
    3. 父类引用指向子类对象/接口引用指向子类对象
  • 程序执行时的特点:

    • 成员变量 编译时 执行时均看 引用数据类(看左边)
    • 成员方法 编译时 看左边 运行时 看对象 (看右边)
  • 多态的好处

    • 提高了代码的扩展性:传参用父类 可以接受任何子类类型 ,在增加方法体内容时,不影响原来代码 不用额外写方法,甚至不用改方法----
  • 弊端

    • 不能使用子类特有的功能
  • 转型

    • 向上转型

      ​ 父类引用指向子类对象 多态的前提(感觉java又做了点什么)

    • 向下转型

      ​ 父类引用转为子了对象 (类似与强转) 用来解决弊端 使用子类特有功能

      强制转化前 可以使用instanceof进行类型判断

抽象类

  • 定义:与具体类相对应,是一类事物的一个统称的类;

      例如: 动物类  人类 员工类是抽象类  我说动物,你知道我说的是什么动物吗?只有看到了具体的动物,你才知道
    
        	 猫类  男人类 	程序员类 是具体类
    
  • 语法

    public abstract class 类名

  • 功能

    对具体类的抽象 用抽象方法来定义规则 提取一类具体类的共同特征到一般的成员方法和成员变量

  • 特点:

    • 抽象类本身特点

      • 不能被实例化 可以用多态方式创建子类对象
      • 抽象类的子类 要么为抽象类 要么重写所有抽象方法
    • 成员特点

      • 成员方法 成员变量 有或无 都行

      • 抽象方法(无方法体) 有或无 都行

        抽象方法语法: public abstract 返回值类型 方法名 (参数列表);

      • 有抽象方法的类必须为抽象类

    • 构造方法

      为子类 提供服务 但是无法直接创建对象---可能存在抽象方法

  • 使用:多态写法 1.创造抽象类的子类2.重写所有抽象方法3.抽象类引用指向子类对象

接口

  • 定义:一种公共的规范标准,只要符合规范标准大家都可以通用接口

  • 功能:对行为的抽象 定义规则

  • 成员特点

    • 成员变量都是常量 即 public static final 变量类型 变量名

    • 成员方法都是抽象方法 即 public abstract 返回值类型 方法名

    • 没有构造方法 无法直接创建对象--都是抽象方法

      成员变量 都是静态的 已经在堆中完成了初始化 无需构造方法

  • 接口的"子类"

  • 实现类 重写全部抽象方法 (extends)

  • 接口 扩展自身功能 (implements)

  • 抽象类 扩展功能 (extends)

  • JDK1.8 -1.9新特性

    • 1.8 增加默认方法

      语法:public defalut 返回值类型 方法名(){}

      注意事项:可以定义多个 defalut不能省略 用来抽取实现类中都有的方法

    • 1.8 增加静态方法

      注意事项:接口的静态方法只能通过 接口名调用 不能通过实现类名或者对象名调用

    • 1.9 增加私有方法

      为1.8添加的方法服务 抽取公共的代码到方法

类 接口 抽象类 的关系

先右后下 接口 抽象类
单继承 多实现 单继承
接口 不存在关系 多继承 不存在关系
抽象类 单继承 多实现 单继承

抽象类可以选择性实现接口来扩展功能

由于存在继承关系 抽象类的所有抽象方法 子类必须全部重写

可以选择 实现或 不实现接口 来确定是否扩展功能

posted @ 2022-06-03 22:27  ACMAN-Mr.Lee  阅读(82)  评论(0)    收藏  举报