接口和抽象类及它们的区别

区别:

  1. 接口的方法默认是 public,所有方法在接口中不能有实现(Java 8 开始接口方法可以有默认实现),而抽象类可以有非抽象的方法。
  2. 接口中除了 static、final 变量,不能有其他变量,而抽象类中则不一定。
  3. 一个类可以实现多个接口,但只能实现一个抽象类。接口自己本身可以通过 extends 关键字扩展多个接口。
  4. 接口方法默认修饰符是 public,抽象方法可以有 public、protected 和 default 这些修饰符(抽象方法就是为了被重写所以不能使用 private 关键字修饰!)。
  5. 从设计层面来说,抽象是对类的抽象,是一种模板设计,而接口是对行为的抽象,是一种行为的规范。

另一种简述:
在Java中,使用abstract关键字修饰的类称之为抽象类。抽象类是不能被实例化的,通常需要写一个子类来继承抽象类,同时实例化子类来获得该类的对象。抽象类通常用于表示一种抽象的概念。
接口可以说是一种特殊的抽象类,接口中只能定义常量、抽象方法、静态方法和默认方法。由于接口的特殊性,在定义时需要使用interface关键字。

抽象类

抽象方法必须使用 abstract 关键字来修饰,并且在定义方法时不需要实现方法体。当一个类中包含了抽象方法,那么该类也必须使用 abstract 关键字来修饰,这种使用 abstract 关键字修饰的类就是抽象类。
抽象类及抽象方法定义的基本语法格式如下:

//定义抽象类
[修饰符] abstract class 类名 {
	//定义抽象方法
	[修饰符] abstract 方法返回值类型 方法名 ([参数列表]);
	//其他方法或属性
}

注意:包含抽象方法的类必须定义为抽象类,但抽象类中可以不包含任何抽象方法。另外,抽象类是不可以被实例化的,因为抽象类中有可能包含抽象方法,抽象方法是没有方法体的,不可以被调用。如果想调用抽象类中定义的抽象方法,需要创建一个子类,在子类中实现抽象类中的抽象方法。

接口

接口是一种特殊的抽象类,它不能包含普通方法,其内部的所有方法都是抽象方法,它将抽象进行得更为彻底。
在 JDK 8 中,对接口进行了重新定义,接口中除了抽象方法外,还可以有默认方法和静态方法(也叫类方法),默认方法使用 default 修饰,静态方法使用 static 修饰,并且这两种方法都允许有方法体。
接口定义的基本语法格式如下:

[修饰符] interface 接口名 [extends 父接口 1,父接口 2,...] {
	[public] [static] [final] 常量类型 常量名 = 常量值;
	[public] [abastract] 方法返回值类型 方法名([参数列表]);
	[public] default 方法返回值类型 方法名 ([参数列表]) {
	//默认方法的方法体
	}
	[public] static 方法返回值类型 方法名 ([参数列表]) {
	//静态方法的方法体
	}
}

在上述语法格式中,“[ ]”中的内容都是可选的,修饰符可以使用 public 或直接省略(省略时默认采用包权限访问控制符)。“extends 父接口 1,父接口 2,…”表示定义一个接口时,可以同时继承多个父接口,这也是为了解决类的单继承的限制。在接口内部可以定义多个常量和抽象方法,定义常量时必须进行初始化赋值,定义默认方法和静态方法时,可以有方法体。

接口的特点归纳:

  • 在 JDK 8 之前,接口中的方法都必须是抽象的,并且方法不能包含方法体。在调用抽象方法时,必须通过接口的实现类的对象才能调用实现方法。从 JDK 8 开始,接口中的方法除了包含抽象方法外,还包含默认方法和静态方法,默认方法和静态方法都可以有方法体,并且静态方法可以直接通过“接口名.方法名”来调用。
  • 当一个类实现接口时,如果这个类是抽象类,只需实现接口中的部分抽象方法即可,否则需要实现接口中的所有抽象方法。
  • 一个类可以通过 implements 关键字同时实现多个接口,被实现的多个接口之间要用英文逗号(,)隔开。
  • 接口之间可以通过 extends 关键字实现继承,并且一个接口可以同时继承多个接口,接口之间用英文逗号隔开。
  • 一个类在继承一个类的同时还可以实现接口,此时,extends 关键字必须位于 implements 关键字之前。具体示例如下:
class A extends B implements C {	//先继承,再实现
		.
		.
		.
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值