关于Java:接口与抽象类的区别

Difference between Interface And Abstract Class

本问题已经有最佳答案,请猛点这里访问。

为什么我们在已经给出抽象类的情况下使用接口?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
interface A  {
    void show();
}

class TestA implements A {
    public void show(){}
}

abstract class B {
   abstract void show();
}

class TestB extends B {
   public void show(){}
}


接口和抽象类在接口描述行为方面是不同的,而抽象类定义部分实现。接口的优点是,无论对象从哪个类继承,它们都可以由提供必要方法的任何对象实现。

抽象方法通常用于提供部分实现。列表接口就是一个例子,它定义了列表集合的行为,而AbstractList提供了大多数列表实现所需的一些方法,以便更容易地实现列表。列表不需要从AbstractList继承,但许多实现都需要,但是使用列表的代码不需要关心它们使用的实现是否扩展AbstractList。

有些人使用抽象类代替接口,但这通常被认为是反模式的。


因为,抽象类可以有非抽象方法,所以可以在非抽象方法中重用代码!