23
08
2020
共同点
接口和抽象类都是继承的上层,他们的共同点如下:
- 都是上层的抽象层。
- 都不能被实例化。
- 都能包含抽象的方法,这些抽象的方法用于描述类具备的功能,但不提供具体的实现。
不同点
接口中定义的成员变量都是公有的静态变量,抽象类中可以有普通的成员变量。
abstract class A {
int x = 10;
}
interface B {
public final static int x =10;
}
接口中的方法都是公有的抽象方法,抽象类中可以有普通的方法。
abstract class A {
public void methodA() {
}
}
interface B {
public void methodB();
}
JDK1.8开始,接口中允许静态方法和default修饰的默认方法拥有方法体,其实是靠近抽象类的一种体现。
interface D {
// static修饰符定义静态方法
static void staticMethod() {
System.out.println("接口中的静态方法");
}
// default修饰符定义默认方法
default void defaultMethod(){
System.out.println("接口中的默认方法");
}
}
接口是被普通类实现,抽象类是被普通类继承
接口
interface B {
public void methodB();
}
class F implements B{
@Override
public void methodB() {
}
}
抽象类
abstract class A {
public void methodA() {
}
}
class C extends A {
}
接口也可以继承,但是只有接口能继承接口,接口可以实现多继承,抽象类只能是单继承。
接口
interface B {
public void methodB();
}
interface D {
// static修饰符定义静态方法
static void staticMethod() {
System.out.println("接口中的静态方法");
}
// default修饰符定义默认方法
default void defaultMethod(){
System.out.println("接口中的默认方法");
}
}
interface E extends B, D {
}
抽象类
abstract class A {
public void methodA() {
}
}
class C extends A {
}
接口中不能定义构造方法,抽象类中可以(子类构造方法中,必须调用父类的构造方法)。
abstract class A {
public A(){
}
}
class C extends A {
public C() {
super();
}
}
接口可以打破单继承问题,让参数更加灵活,接口多继承,一个类还可以实现多个接口。

非特殊说明,本文版权归 朝雾轻寒 所有,转载请注明出处.