为什么我们已经给出了抽象类而使用接口?
interface A {
void show();
}
class TestA implements A {
public void show(){}
}
abstract class B {
abstract void show();
}
class TestB extends B {
public void show(){}
}
为什么我们已经给出了抽象类而使用接口?
interface A {
void show();
}
class TestA implements A {
public void show(){}
}
abstract class B {
abstract void show();
}
class TestB extends B {
public void show(){}
}
接口和抽象类的不同之处在于接口描述行为,而抽象类定义部分实现。接口的优点是它们可以由任何提供必要方法的对象实现,而不管该对象继承自哪些类。
抽象方法通常用于提供部分实现。一个例子是 List 接口,它定义了 List 集合的行为,与 AbstractList 相比,它提供了大多数 List 实现所需的一些方法,以便更容易实现 List。列表不需要从 AbstractList 继承,但许多实现都需要,但是使用 List 的代码永远不必关心他们使用的实现是否扩展了 AbstractList。
有些人使用抽象类作为接口的替代品,但这通常被认为是一种反模式。
因为,抽象类可以有非抽象方法,所以你可以在非抽象方法中重用代码!