我的印象是,当一个类实现一个接口时,它正在实现抽象方法,因此使它们成为可用的非抽象方法。我的老板认为实现接口的类也是一个接口。这对我来说没有意义。实现接口的类不是抽象的,也没有标记为接口。有人可以就此提出意见吗?
答案 0 :(得分:1)
class
不是interface
。 * 这不会因为类实现接口而改变。
但是,实现接口的类的实例也是该接口的实例。
最大的区别,以及似乎在这里被误解的那个,是类和对象之间的区别。
假设我们有这段代码:
public interface Animal {
}
public class Dog implements Animal {
public static void main() {
Animal rover = new Dog();
}
}
我们可以而且不能说这里定义的东西之间的关系。
我们可以说(假设“是(a / an)”是“是一个实例”的缩写):
Dog
是Animal
。”rover
是Dog
。”rover
是Animal
。”Dog
是Animal
的(子类型/子类/实现)。”Dog
(介绍/提供/实现)接口。” * 我们不能说:
Dog
是interface
。” (不,Dog
是一个类。) * Dog
是Animal
。” (见上文。请注意“Dog
”和“ a Dog
”之间的区别。) * 从语义POV,可以认为每个类都是一个接口。但是这个论点与interface
关键字无关;它依赖于这个词的传统定义。它适用于所有类,无论类implements SomeInterface
。
答案 1 :(得分:0)
一个类永远不是一个接口。它是一个接口的实现,它将帮助您“编程到接口”。
它们可以是用户界面,但与类型界面不同。
答案 2 :(得分:0)
如果一个类实现了它,那么它就不是一个接口。如果接口实现了接口,那么只有逻辑上的东西。这应该是一个界面,不是吗?但这是不可能的(只有扩展)。
答案 3 :(得分:0)
不,类和接口是两回事。将接口视为"编码合同",它可以指定在实现它的每个类中需要的东西,确保在实现接口的所有类中都存在重要的特性。
答案 4 :(得分:0)
类不是接口,但类的实例将是类实现的任何接口的实现,因此对类的实例的引用将是对接口实现的引用。因此,如果所讨论的类实现了接口,则可以将类类型的值分配给接口类型的变量而不进行强制转换。如果有问题的类没有实现接口,代码可能会使用显式转换来请求Java尝试转换。如果变量碰巧持有对实现接口的派生类的实例的引用,则转换将成功;否则会抛出运行时异常。
答案 5 :(得分:0)
我想我理解混乱的根源。如果类'Foo'实现接口'Bar',可以说'Foo'是'Bar'。但即使Foo
是Bar
而Bar
是接口,Foo
也不是接口。 “是”的关系并不总是传递的。