抽象类_接口

本文详细介绍了抽象类和接口在Java中的概念、特点和使用场景。抽象类作为类的抽象,可以包含抽象方法和非抽象方法,但不能实例化。接口则仅定义抽象方法,不包含实现,类与接口之间是实现关系。抽象类适合定义物体固有属性和行为,而接口常用于拓展学习的行为。两者在定义时有明显的区别,如接口不能定义属性和非抽象方法。在实际编程中,根据需求选择抽象类或接口,以实现多态性和代码复用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

抽象类

抽象方法

只有方法的声明,没有方法的实现

特点:

  • 抽象方法不需要定义实现内容,大括号都不需要
  • 抽象方法一般使用关键字来修饰 :abstract
抽象类的特点
  • 抽象类:使用abstract关键字来修饰

  • 抽象类和抽象方法的关系

    • 抽象方法需要在抽象类中定义
    • 抽象类中不一定有抽象方法
    • 抽象类中可以定义非抽象方法
  • 抽象类不能实例化 【不能创建对象】

  • 抽象类和普通类之间也可以是继承关系

    • 如果子类继承了抽象父类,然后重写了父类中所有的抽象方法,那么该子类可以正常创建对象,是一个普通类型
    • 如果子类继承了抽象父类后,没有重写完父类中的所有抽象方法,那么该子类只能定义为一个抽象类,不能继续创建对象。

代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jRSDZvnf-1645863437203)(file:///C:\Users\12994\AppData\Local\Temp\ksohtml\wpsD34A.tmp.jpg)]

抽象类成员特点
  • 抽象类中成员属性特点:

    • 抽象类中可以正常给该类型定义属性(目的:用于让子类继承)
    • 属性名本身有一层抽象话的含义,不能再次抽象
  • 抽象类成员方法的特点:

    • 抽象类中既可以定义抽象方法,也可以定义非抽象方法
  • 抽象类中一样可以定义静态方法,也可以被子类继承

  • 抽象类中可不可以(需不需要)定义构造方法?

    抽象类虽然不能创建对象,但是也需要定义构造方法

    原因:因为在初始化子类对象数据之前,需要先初始化父类中的数据,那么就需要使用父类中的构造方法。

抽象类的应用

模板设计模式

概述:每一个子类中的共有内容可以定义在父类中,当每一个子类需要该功能,但是有不同的实现内容时,可以将该功能定义为抽象的,也可以将该类型定义为抽象类

模板类代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YyJcOo3g-1645863437205)(file:///C:\Users\12994\AppData\Local\Temp\ksohtml\wps4242.tmp.jpg)]

子类代码:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aplAmQXN-1645863437205)(file:///C:\Users\12994\AppData\Local\Temp\ksohtml\wps7317.tmp.jpg)]

接口【JDK1.8之前】

概述:生活的角度:接口用来表示一些指定的规则,想要使用接口就要满足接口定义的要求, Java语言的角度:规则可以通过抽象方法来表示;接口就是专门来定义抽象方法的一个特殊类型。

  • 接口的特点:
    • 定义接口的关键字:interface
    • 接口中只可以定义抽象方法,不可以定义非抽象方法
    • 类和接口之间的关系:
      • 不是继承关系,是实现关系
      • 实现接口关键字:implements
      • 类型实现一个接口之后,接口中的抽象方法,也能被该类所继承
    • 接口不能实例化(不能创建对象)
    • 接口和普通类以及抽象类一样,使用之前先编译

接口的成员特点

  • 接口中变量的特点:

    • 接口中不能存在变量,只能存在常量
    • 如果接口中定义了一个变量,那么该变量会默认通过:static final 来修饰
  • 接口中方法的特点:

    • 接口中只可以定义抽象方法,不能定义非抽象方法,
    • 如果定义一个抽象方法,可以省略关键字:abstract
  • 接口中静态方法的特点:

    • 接口中可以定义静态方法
  • 接口不需要定义构造方法

  • 一个类型是否需要定义构造方法跟当前类可不可以创建对象有关系么?【没有关系】

  • 一个类型需要定义构造方法跟谁有关?

    【跟当前类中是否可以定义属性有关,当前类中可以定义属性,就需要从一构造方法,给它初始化,如果不能定义属性,就不需要定义构造方法来初始化】

类与类、类与接口、接口与接口的关系

  • 类与类:继承关系–extends

    ​ 可以单继承、可以多层继承、不可以多继承

  • 类与接口【interface】:实现关系【implements】

    • 可以单实现、可以多实现、不可以多层实现
    • 单实现:实现之后,该类型可以结成接口的每一个抽象方法
    • 多实现:实现多个接口以后,可以继承每一个接口的方法
    • 不能多层实现:因为一个类型实现一个接口之后,那么该类和其他类之间不能实现关系,只能是继承关系
  • 接口与接口之间:继承关系 extends

    • 可以单继承、可以多继承、可以多层继承

抽象类和接口的区别

相同点:

  • 接口和抽象类都可以定义抽象方法

不同点:

  • 抽象类可以定义非抽象方法;接口不能定义非抽象方法
  • 抽象类可以定义属性;接口中不能定义属性
  • 抽象类需要定义构造方法;接口不需要定义构造方法

抽象类和接口的使用:

  • 抽象类中一般定义物体固有的属性和行为

  • 接口中一般通过拓展学习的来的行为

  • 抽象类可以定义非抽象方法;接口不能定义非抽象方法

  • 抽象类可以定义属性;接口中不能定义属性

  • 抽象类需要定义构造方法;接口不需要定义构造方法

抽象类和接口的使用:

  • 抽象类中一般定义物体固有的属性和行为
  • 接口中一般通过拓展学习的来的行为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮卡丘不断更

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值