java8 多态、抽象类、接口

多态

​ 指的是一种事物在不同时刻表现出的不同状态

  • 多态的前提:

    ​ 1.要有继承,没有继承,多态就无从谈起

    ​ 2.要有方法重写,可以不重写,但多态就失去了意义

    父类引用指向子类对象 <===>父 f=new 子();

  • 多态的形式来访问成员变量,编译看左边,运行也看左边

    多态的形式访问成员变量,访问的都是父类的变量

  • 多态的形式来访问成员方法,编译看左边,运行看右边

    编译期看父类有没有这个方法,如果有就不报错。实际调用时,会以子类重写过后的为准。当然,子类确实没有重写,那就以父类为准。

在这里插入图片描述

在这里插入图片描述

  • 多态的形式来访问静态方法,因为静态方法不算重写,故访问的都是父类。

  • 多态的好处:1.提高代码的复用性和维护性(继承保证)

    ​ 2.提高了代码的扩展性(多态保证)

  • 多态的弊端:

    ​ 多态不能直接调用子类特有的功能(我们可以采用向下转型来调用子类特有的功能)多态就是向上转型(父类引用指向子类)向下转型命名规则:Zi zi=(Zi)fu;

在这里插入图片描述
在这里插入图片描述

抽象类
  • 因为不知道子类对这个功能的具体实现,所以也没必要给出功能贡献的具体实现,而是应该给出一个声明即可。

  • 抽象类:抽取所有子类的共性功能,但是不给出共性功能的具体实现,而是交由子类根据自身的特性作以实现。

  • 语法格式:abstract class 类名/方法名();

  • 抽象类的语法特点:

    1. 抽象类中可以没有抽象方法,也可以有抽象方法。

    2. 一个类中一旦有了抽象方法,此类就必须为抽象类。

    3. 抽象类,不能直接实例化。但是可以采用多态的形式来间接实例化。Fu fu=new Zi();

    在这里插入图片描述
    在这里插入图片描述

    1. 抽象类中的所有抽象方法,强制子类必须重写。

    2. 抽象类的子类有两种选择,选择1:重写抽象类中的所有抽象方法。选择2:自己也是子类。

    3. 可以没有抽象方法,也可以有抽象方法。这样设计的考虑,非抽象方法,可以让子类直接继承使用,对于抽象方法,是要求子类必须重写的。

  • 抽象类有构造方法,作用是为了让子类间接实例化

  • 一个类如果没有抽象方法,可不可以定义为抽象类?如果可以,有什么意义?

    可以,这个类不想让外界创建对象

  • abstract不能和哪些关键字共存?

    private 矛盾 abstract 强制子类必须重写 private 私有的不能继承,重写不了

    final 矛盾 final方法子类不能重写 abstract强制重写

    static 方法不能参与重写

接口

​ 是为了定义一些额外扩展的功能。哪些事物,想要具备这些功能,可以对该接口进行实现。

  • 关键字:interface 在接口中提供扩展功能

  • 接口的子类有两种选择:

    1. 重写接口中的所有抽象方法
    2. 自己本身是抽象类,但意义不大
  • 接口中的成员特点;

    1. 接口中的成员变量,全部是公共的静态常量 前面存在默认修饰符 public static final 。接口名可以直接调用(a.num)
    2. jdk1.7 之前接口中的方法全都是抽象方法,不存在非抽象方法,方法前面存在默认修饰符 public abstract
    3. 接口中没有构造方法这一说。
    4. 接口不能实例化(new对象)
      在这里插入图片描述
      在这里插入图片描述
  • 类与类之间的关系:继承关系 extends 并且是单继承

  • 类与接口之间的关系:实现关系 implements 并且可以多实现(一个类可以实现多个接口。这个类,要把他所有实现的接口中的抽象方法重写)

  • 接口与接口之间的关系:继承关系 extends 并且是多继承(一个接口可以继承多个接口)

  • jdk 1.8之后针对接口,做了一些新的定义。

    jdk 1.8之后允许给出方法的具体实现,但这个方法得用default来修饰。

    jdk 1.8之后接口中可以定义静态方法

  • java中的接口,更多的是来定义一些规则和一些规范的,以实现这个扩展性。

  • 抽象类与接口的区别:

  1. 抽象类中可以定义抽象方法,也可以定义非抽象方法。

    接口里面定义的是抽象方法,JDK 1.8后可以定义default修饰的方法和静态方法。

  2. 抽象类有构造方法;

    接口没有构造方法这一说

  3. 抽象类可以定义成员变量也可以定义常量;

    接口中诠释公共的静态常量。

  4. 设计思想:

    抽象类是抽象所有子类的共性功能,并不给出共性功能的具体体现,而是交由子类根据自身的差异性,去做具体体现。

    接口体现的是一种扩展的思想,通常用来定义一些规范和规则,哪些事物想要具备这些扩展功能,可以实现具体的接口,接口他只需要维护一套规范或者说规则,那么具体对规范的实现,是有子类来具体实现的。

    例:动物类:姓名,年龄,吃饭,睡觉。
    动物培训接口:跳高
    猫继承动物类并实现跳高接口
    狗继承动物类并实现跳高接口

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值