实现接口的类也是接口吗?

时间:2014-06-18 19:15:14

标签: java class interface

我的印象是,当一个类实现一个接口时,它正在实现抽象方法,因此使它们成为可用的非抽象方法。我的老板认为实现接口的类也是一个接口。这对我来说没有意义。实现接口的类不是抽象的,也没有标记为接口。有人可以就此提出意见吗?

6 个答案:

答案 0 :(得分:1)

class不是interface * 这不会因为类实现接口而改变。

但是,实现接口的类的实例也是该接口的实例

最大的区别,以及似乎在这里被误解的那个,是类和对象之间的区别。

假设我们有这段代码:

public interface Animal {
}

public class Dog implements Animal {
    public static void main() {
        Animal rover = new Dog();
    }
}

我们可以而且不能说这里定义的东西之间的关系。

我们可以说(假设“是(a / an)”是“是一个实例”的缩写):

  • “A DogAnimal。”
  • roverDog。”
  • roverAnimal。”
  • DogAnimal的(子类型/子类/实现)。”
  • Dog介绍/提供/实现)接口。” *

我们不能说:

  • Doginterface。” (不,Dog是一个类。) *
  • DogAnimal。” (见上文。请注意“Dog”和“ a Dog”之间的区别。)

* 从语义POV,可以认为每个类都是一个接口。但是这个论点与interface关键字无关;它依赖于这个词的传统定义。它适用于所有类,无论类implements SomeInterface

答案 1 :(得分:0)

一个类永远不是一个接口。它是一个接口的实现,它将帮助您“编程到接口”。

它们可以是用户界面,但与类型界面不同。

答案 2 :(得分:0)

如果一个类实现了它,那么它就不是一个接口。如果接口实现了接口,那么只有逻辑上的东西。这应该是一个界面,不是吗?但这是不可能的(只有扩展)。

答案 3 :(得分:0)

不,类和接口是两回事。将接口视为"编码合同",它可以指定在实现它的每个类中需要的东西,确保在实现接口的所有类中都存在重要的特性。

答案 4 :(得分:0)

类不是接口,但类的实例将是类实现的任何接口的实现,因此对类的实例的引用将是对接口实现的引用。因此,如果所讨论的类实现了接口,则可以将类类型的值分配给接口类型的变量而不进行强制转换。如果有问题的类没有实现接口,代码可能会使用显式转换来请求Java尝试转换。如果变量碰巧持有对实现接口的派生类的实例的引用,则转换将成功;否则会抛出运行时异常。

答案 5 :(得分:0)

我想我理解混乱的根源。如果类'Foo'实现接口'Bar',可以说'Foo'是'Bar'。但即使FooBarBar是接口,Foo也不是接口。 “是”的关系并不总是传递的。