我来回答你的问题 希望对你有用
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制。正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力
abstract class和interface之间在对于抽象类定义的支持方面具有很大的相似性,甚至可以相互替换,但是有时候还是会有很大区别的
我给你举出两个例子:假设在我们的问题领域中有一个关于Door的抽象概念,该Door具有执行两个动作open和close,
此时我们可以通过abstract class或者interface来定义一个表示该抽象概念的类型,
定义方式分别如下所示:
1.使用abstract class方式定义Door:
abstract class Door
{
abstract void open();
abstract void close();
}
使用interface方式定义Door:
interface Door
{
void open();
void close();
}
从这两个例子中可以可以看书 他们的设计理念有很大不同!
实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。
还有就是,abstract class 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。
但是,一个类却可以实现多个interface。
具体来说接口和抽象类分别在什么情况下使用它们,你可以这么理解:
例如“动物”你是用接口来描述还是抽象类来描述?都可以,如果你的需求中“动物”的子类有很多共性的方法,
那么你可以用抽象类来描述。如果你的需求中“动物”的子类没有共性方法,那么就用过接口定义不同的方法让子类去实现就可以了。
你的问题到最后就是像上面的例子一样要根据实际情况来决定什么时候用接口什么时候用抽象类。
|