接口是否在子类中自动实现?

时间:2014-05-04 21:27:29

标签: c# java oop inheritance interface

标题是不言自明的:如果我有一个实现某个接口的类,该接口是否在继承的类中自动实现?

注意:之前已经提出过这个问题,但有关Visual Basic的问题。如果它重复,我道歉,但我无法在任何地方找到答案。

2 个答案:

答案 0 :(得分:2)

未标记为private的所有内容都由子类继承,因此,为接口实现的类成员将被继承。由于接口成员不能是私有的(出于显而易见的原因),基类实现的所有内容都必须由子类继承。

接口只是一个合同,说"这种类型将使用相同的签名实现这些成员"。

答案 1 :(得分:2)

是的,至少在Java中,接口实现从超类传播到子类。

在一般意义上,类继承和接口实现都表示“is-a”关系:

interface Vehicle { /* ... */ }
class Car implements Vehicle { /* ... */ }
class ElectricCar extends Car { /* ... */ }

// This works because ElectricCar is a Car, which is a Vehicle.
Vehicle vehicle = new ElectricCar();

实际上,作为接口实现一部分的方法必须是public,因此接口的任何可实例化实现者(例如上面的ElectricCar)都会暴露所有方法接口所要求的,通过从其超类继承或通过其自身必然的公共覆盖。

请注意,没有任何内容会“自动实施”:如果Car标记为abstract,则可能缺少一个或多个Vehicle方法的实现,就好像Car已经将未实现的Vehicle方法标记为abstract 。在任何情况下,子类ElectricCar都将被视为(并且必须是)Vehicle的实现者,但是如果Car没有提供Vehicle方法的实现,那么ElectricCar将不会编译,直到它提供它自己的。