Dotcpp  >  编程教程  >  Java接口与实现  >  Java接口与抽象类的比较

Java接口与抽象类的比较

点击打开在线编译器,边学边练

1. Java接口与抽象类的比较

(1) abstract(抽象)类和接口都可以有abstract(抽象)方法。

(2) 接口中只可以有常量,不能有变量,而abstract类中既可以有常量也可以有变量。

(3) abstract类中也可以有非abstract方法,接口不可以。


在设计程序时应当根据具体的分析来确定是使用抽象类还是接口。abstract类除了提供重要的需要子类重写的abstract方法以外,还提供了子类可以继承的变量和非abstract方法。


如果某个问题需要使用继承才能更好地解决,比如:子类除了需要重写父类的abstract方法以外,还需要从父类继承一些变量或继承一些重要的非abstract方法,就可以考虑用abstract类。如果某个问题不需要继承,只是需要若干个类给出某些重要的abstract方法的实现细节,就可以考虑使用接口。

注意:JDK1.8接口支持静态方法和默认方法。


2. JDK1.8之前接口的定义和限制

1)接口不能用于实例化对象。

2)接口没有构造方法。

3)接口中所有的方法必须是抽象方法。

4)接口不能包含成员变量,除了static和final变量。

5)接口不是被类继承,而是要被类实现。

6)接口支持多继承。


默认方法就是接口可以有实现方法且不需要实现类去实现其方法,只需要在方法名前面加上default关键字即可实现默认方法。默认方法提供了一种扩展接口的方法,而且还不会破坏现有代码。


3. 注意事项

(1) 接口默认方法、静态方法可以有多个。

(2) 默认方法通过实例调用,静态方法通过接口名调用。

(3) default关键字只能用在接口中。

(4) 默认方法可以被继承,如果继承多个接口,多个接口都定义多个同样的默认方法,实现类需要重写默认方法,不然会报错。

(5) 静态方法不能被继承和覆盖,所以只能被具体所在的接口调用。

注意:JDK1.9以后,允许将方法定义为private,使得某些复用的代码不会把方法暴露出去。



本文固定URL:https://www.dotcpp.com/course/798

上一课:

Java接口参数

下一课:

Java接口的UML图

Java教程
第一章 Java入门
第二章 Java运算符和表达式
第三章 Java流程控制
第四章 Java类和对象
第五章 Java子类与继承
第六章 Java接口与实现
第七章 Java内部类与异常类
第八章 Java常用实用类
第九章 Java输入输出流
第十章 Java数组
Dotcpp在线编译      (登录可减少运行等待时间)