抽象类和接口的特点和异同

抽象类

关键字:abstract:抽象

可以修饰类:叫做抽象类

可以修饰方法:叫做抽象方法,没有方法体,需要使用分号表示声明结束,抽象方法所在的类必须是抽象类

子类必须重写父类的抽象方法,除非子类也是抽象类
使用 abstract 关键字修饰,只表示声明了一个方法,但是没有任何的实现
特点:
​ 1)没有方法体,需要使用分号表示方法声明结束
​ 2)如果一个类中有一个方法是抽象的,那么这个类必须是抽象的
​ 3)抽象方法必须被子类重写,除非子类也是抽象类
使用abstract关键字修饰
特点:
​ 1)抽象类中可以包含抽象方法,也可以包含普通方法。
​ 2)抽象类中有构造方法,但是不能创建对象,构造方法目的在子类中会被调用。
​ 3)抽象类的存在就是为了被继承,子类必须重写父类的抽象方法,除非子类也是抽象类。

与普通类的区别

抽象类和普通类的区别:
​ 1)抽象类需要 abstract 声明,而普通类不需要
​ 2)构造方法:都有,但是抽象类不能实例化对象,普通类可以
​ 3)成员方法:抽象类中可以存在抽象的成员方法也可以存在非抽象成员方法,而普通类中只能存在非抽象成员方法

接口

官方解释:Java 接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。

接口是一种特殊的抽象类,这种抽象类中只包含常量和方法的定义,而没有方法的实现

从功能上讲:接口表示一种约定或能力
1)接口不能创建对象,而且接口中没有构造方法
2)接口中的方法一般都是共有抽象方法:public abstract
3)接口中所有的属性都是共有静态常量属性:pulbic static final

默认值:

在一个接口中声明方法时,若没有声明访问权限,默认也是 public,若没其他修饰默认也是 abstract;
声明属性时,若没有声明访问权限和静态常量,默认也是 public static final

关键字 interface:表示一个接口,接口 interface 和类 class 是平级关系

接口名命名:

​ 如果接口表示一种能力,命名采用:名字+后缀 able ,比如 Serializable Comparable

​ 如果接口表示一种约定或规范 ,按照命名规范正常命名 USB , Comparator,CharSequence

1)普通接口:在接口中可以声明抽象方法,和静态常量属性
2)常量群接口:在接口中只声明一组静态常量属性
3)标志性接口:在接口中没有抽象方法,也没有静态常量,作用为了标记某个类具有某个功能

继承关系:使用关键字 extends 实现接口与接口的继承关系

接口继承的特点:
1)接口中没有私有成员,所以父类接口中的所有成员都会被子接口继承
2)父子关系中都是接口,所以在子接口中不需要实现任何的抽象方法
3)接口可以多继承

jdk1.8 之后接口中使用 static 关键字修饰的方法有方法体、静态方法需要有方法体
jdk1.8 之后接口中使用 default 关键字修饰的方法有方法体

抽象类和接口区别

语法:

  • 抽象类使用 abstract,接口使用 interface
  • 抽象类中可以包含抽象方法,也可以包含非抽象方法,接口中只能包含抽象方法和静态常量,
    jdk1.8 之后接口可以包含静态方法和默认方法。
  • 抽象类和接口都不能实例化。
  • 抽象类可以包含构造方法,接口中没有构造方法。

功能:

  • 抽象类一般用来表示同类事物,接口可以表示不是同类事物。
  • 抽象类可以实现代码的重用,也可以约束子类的功能。
  • 接口就是约束实现类的功能,降低代码之间的耦合性。

使用场景:

  • 程序或模块内部使用抽象类
  • 程序架构或模块之间使用接口

总结

1 抽象类:

​ 实例化对象没有意义,所以使用抽象类

抽象类不能实例化对象

​ 抽象类可以包含抽象方法,也可以包含非抽象方法

​ 包含抽象方法的类一定是抽象类

​ 抽象类的抽象方法必须被子类重写,除非子类也是抽象类

2 abstract 关键字

​ abstract 修饰类表示抽象类

​ abstract 修饰方法 抽象方法

3 抽象方法

​ 抽象方法没有方法体

​ 抽象方法被子类重写

4 final 、 abstract 、static

​ final 和 abstract 不能一起使用

​ static 和 abstract 不能一起使用

final 修饰的类特点:不能被继承且不能被重写(修改);
abstract 修饰的类特点:必须被继承且必须被重写;
static 修饰的类特点:静态可被直接调用;

附上static final abstract 总结

在这里插入图片描述

5 接口 :就是特殊的抽象类

功能:表示一个约定或能力

优点:一个类只能继承一个抽象类,但可实现多个接口(多重继承)

现有类 A 和类 B,两个类中都有 fun() 方法,假如类 C 继承类 A 和类 B,当使用类 C 的对象调用 fun 方法时,如何执行?
抽象类:此时不知道执行那个 fun 方法,所以抽象类不可以多继承。
接口:而由于接口中的没有方法体,所在只要在接口 C 中存在了 fun 方法即可,所以接口支持多继承

扩展类的功能,保持对外接口一致
接口实现了多重继承,完成类和任何实现接口子类的通信和交互
降低代码之间的耦合性(即提升可读性和可维护性)

耦合性(英语:Coupling,dependency,直译为“依赖连接程度”,或称耦合力、耦合度)是一种软件度量,是指一程序中,模块及模块之间信息或参数依赖的程度。
内聚性是一个和耦合性相对的概念,一般而言低耦合性代表高内聚性,反之亦然。
耦合性和内聚性都是由提出结构化设计概念的赖瑞·康斯坦丁所提出[1]。低耦合性是结构良好程序的特性,低耦合性程序的可读性及可维护性会比较好。

学习原文地址

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值