抽象类和接口以及抽象类和接口的区别

抽象类和接口以及抽象类和接口的区别

1.抽象类

  1. 抽象类是:类和类之间有共同特征,将这些具有共同特征的类再进一步抽象形成抽象类。由于类本身是不存在的,所以抽象类无法创建对象。

  2. 类是:现实世界中不存在的,人类大脑思考总结的结果

  3. 对象是:现实世界中存在的

  4. 抽象类也属于引用数据类型

  5. 抽象类定义:

    ​ 语法:[修饰符列表] abstract class 类名 {

    ​ 类体;

    ​ }

  6. 抽象类是无法实例化的,无法创建对象,所以抽象类是用来被子类继承的

  7. final和abstract不能联合使用,这两个关键字是对立的

  8. 抽象类的子类可以是抽象类,也可以是非抽象类

  9. 抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。

2.抽象方法

  1. 抽象方法表示没有实现的方法,没有方法体的方法。例如:

    ​ public abstract void doSome();

    ​ 抽象方法特点是:1.没有方法体,以分号结尾;2.前面修饰符列表中有 abstract 关键字

  2. 抽象类中不一定有抽象方法,但是抽象方法必须出现在抽象类中

  3. 【重要】一个非抽象的类继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。需要将从父类中继承过来的抽象方法进行覆盖/重写,或者也叫做“实现”

  4. 面向对象编程,不要面向具体编程,降低程序的耦合度,提高程序的扩展力,这种编程思想符合ocp原则

【判断题】Java语言中凡是没有方法体的方法都是抽象方法。

​ 不对,Object类中就有很多方法都没有方法体,都是以“;”结尾的,但他们不是抽象方法。

3.接口

3.1 接口的基础语法

  1. 接口也是一种“引用数据类型”,编译之后也是一个class字节码文件

  2. 接口是完全抽象的。(抽象类是半抽象。)或者也可以说接口是特殊的抽象类。

  3. 接口的定义语法:

    [修饰符列表] interface 接口名{

    }

    类:

    [修饰符列表] class 类名{

    }

    抽象类

    [修饰符列表] abstract class 类名{

    }

  4. 接口支持多继承,一个接口可以继承多个接口

  5. 接口中只包含两部分内容,一部分是:常量。一部分是:抽象方法。接口中没有其它内容了,只有这两部分。

  6. 接口中所有的元素都是public修饰的,(都是公开的)

  7. 接口中的抽象方法定义时:public abstract 修饰符可以省略

  8. 接口中的方法都是抽象方法,所以接口中的方法没有方法体

  9. 接口中常量public static final 可以省略,访问常量的语法:接口名.

  10. 类和类之间叫做继承,类和接口之间叫做实现

    ​ 继承使用extend关键字完成

    ​ 实现使用implement关键字完成

  11. ==【重点】==当一个非抽象的类实现接口的话,必须将接口中所有的抽象方法全部实现(覆盖、重写)

  12. 一个类可以实现多个接口,为Java弥补了单继承的缺陷

  13. 接口A和接口B虽然没有继承关系,但是写代码的时候,可以互转,编译器没有意见。但是运行时可能出现错误。最终需要加:instanceof运算符进行判断。向下转型养成好习惯,转型之前先if+instanceof 进行判断

  14. 接口通常提取的是行为动作

  15. 接口和实现都存在的话:extend 关键字在前;implements 关键字在后

  16. 使用接口写代码的时候,可以使用多态(父类型引用指向子类型对象)

3.2接口在开发中的作用

  1. 接口在开发中的作用,类似于多态在开发中的作用。

    多态:面向抽象编程,不要面向具体编程。降低程序的耦合度,提高程序的扩展力。

  2. Customer has a FoodMenu,但凡是满足has a 的表示都以属性的形式存在

    Cat is a Animal,但凡满足 is a 的表示都可以设置为继承

  3. 面向接口编程,可以降低程序的耦合度,提高程序的扩展力,符合ocp开发原则。

    接口的使用离不开多态机制。(接口 + 多态才可以达到降低耦合度)

  4. 接口可以解耦合,任何接口都有调用者和实现者,接口可以将调用者和实现者解耦合,调用者面向接口调用,实现者面向接口实现

4.类型与类型之间的关系

is a , has a , like a

is a:

​ Cat is a Animal(猫是一个动物)

​ 凡是能够满足 is a 的表示“继承关系”

has a :

​ I has a Pen (我有一支笔)

​ 凡是能够满足 has a 关系的表示“关联关系”

​ 关联关系通常以“属性”的形式存在

like a :

​ Cooker like a FoodMenu(厨师像一个菜单一样)

​ 凡是能够满足 like a 关系的表示“实现关系”

​ 实现关系通常是:类实现接口。

5.抽象类和接口的区别

  1. 抽象类是半抽象的,接口是完全抽象的
  2. 抽象类中有构造方法,接口中没有构造方法
  3. 类和类之间只能单继承,接口和接口之间支持多继承
  4. 一个类可以同时实现多个接口,一个抽象类只能继承一个类(单继承)
  5. 接口中只允许出现常量和抽象方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值