我目前正准备参加我的scjp考试。我知道 IS-A 意味着扩展 HAS-A 意味着拥有另一个对象的实例。但是,如果扩展一个实现另一个接口的抽象类,它是否会使该类成为一种接口和抽象呢?
interface Animal{
void eat();
void sleep();
}
abstract class Duck implements Animal{
public void eat(){}
public void sleep(){}
}
class Animals extends Duck{
//dosomething...
}
类动物IS-A(N)动物和IS-A鸭
或
动物IS-A(N)动物
或
类动物IS-A鸭
答案 0 :(得分:1)
是的,子类将是该接口的一种类型。但是,子类是否是抽象的取决于您是否将其定义为抽象。
在你的例子中(使用没有意义的类名),子类不是抽象的,这意味着它必须实现其抽象超类的所有抽象方法,而不是接口的所有方法已经由抽象超类实现。
答案 1 :(得分:0)
从面向对象设计的角度来看,implements SomeInterface
和extends SomeClass
都创建了一个IS-A关系。在这两种情况下,您都要创建类接口的子类型。
不的含义是,现在子类也是一个接口,或者它也是抽象的。如果使用关键字interface
声明类型,则它只能是接口,如果使用关键字abstract
和关键字class
声明它,则它只能是抽象类。 / p>
在你的例子中,类动物既是鸭子又是动物。但它不是接口或抽象类。
顺便说一句,选择给你的班级打电话"动物"可能表示您错过了关系的某些内容。子类型总是比其扩展的类型更具体。所以也许如果你打电话的话,马拉德"它会更准确地代表这种关系:野鸭是一种特殊的鸭子,也是一种特殊的动物。它是一种特殊的动物,因为鸭是一种特殊的动物。