我的意思是:
interface B {...}
interface A extends B {...} // allowed
interface A implements B {...} // not allowed
我用Google搜索,然后找到了this:
implements
表示定义接口方法的实现。但是接口没有实现,所以这是不可能的。
但是,interface是100%抽象类,抽象类可以实现接口(100%抽象类)而不实现其方法。定义为“界面”时有什么问题?
详情,
interface A {
void methodA();
}
abstract class B implements A {} // we may not implement methodA() but allowed
class C extends B {
void methodA(){}
}
interface B implements A {} // not allowed.
//however, interface B = %100 abstract class B
答案 0 :(得分:101)
implements
表示实现,interface
只是为了声明提供interface
而不是实现。
100%abstract class
在功能上等同于interface
,但如果您愿意,它也可以实现(在这种情况下,它不会保持100%abstract
),所以从JVM的观点是不同的东西。
100%抽象类中的成员变量也可以具有任何访问限定符,其中在接口中它们是隐式public static final
。
答案 1 :(得分:23)
implements
表示将为abstract
方法定义一个行为(显然除了抽象类),您可以定义实现。
extends
表示行为是继承的。
使用接口可以说一个接口应该具有与另一个接口相同的行为,甚至没有实际的实现。这就是为什么它与extends
另一个接口的接口更有意义,而不是实现它。
另外请注意,即使abstract
类可以定义abstract
方法(界面的理智方式),它仍然是类并且仍然必须继承(扩展)而不是实现。
答案 2 :(得分:4)
从概念上讲,有两个“域”类和接口。在这些域中,你总是在扩展,只有一个类实现了一个接口,这是一种“跨越边界”。因此,接口的“扩展”基本上反映了类的行为。至少我认为这是背后的逻辑。似乎并非每个人都同意这种逻辑(我发现自己有点做作),事实上,没有任何技术理由可以使用两个不同的关键字。
答案 3 :(得分:2)
但是,接口是100%抽象类,抽象类可以 实现接口(100%抽象类)而不实现它 方法。定义为“界面”时有什么问题?
这只是一个惯例问题。 java语言的编写者认为“扩展”是描述这种关系的最佳方式,所以这就是我们所有人都使用的。
一般来说,即使界面是“100%抽象类”,我们也不会这样想。我们通常将接口视为实现某些关键方法的承诺,而不是从中派生的类。因此,我们倾向于使用不同的语言进行接口而不是类。
正如其他人所说,选择“延伸”而不是“工具”是有充分理由的。
答案 4 :(得分:1)
希望这会对我在大学期间在oops(核心java)中学到的东西有所帮助。
Implements表示定义接口方法的实现。但是接口没有实现,因此不可能。但是,接口可以扩展另一个接口,这意味着它可以添加更多方法并继承其类型。
下面是一个例子,这是我的理解和我在oops中学到的东西。
interface ParentInterface{
void myMethod();
}
interface SubInterface extends ParentInterface{
void anotherMethod();
}
并记住一件事,一个界面只能扩展另一个界面,如果你想在某个类上定义它的功能,那么只有一个界面实现,例如下面
public interface Dog
{
public boolean Barks();
public boolean isGoldenRetriever();
}
现在,如果一个类要实现这个接口,那就是它的样子:
public class SomeClass implements Dog
{
public boolean Barks{
// method definition here
}
public boolean isGoldenRetriever{
// method definition here
}
}
如果抽象类有一些抽象函数定义和声明,并且你想定义那些函数,或者你可以说实现那些函数,那么你想扩展该类,因为抽象类只能扩展。这是下面的例子。
public abstract class MyAbstractClass {
public abstract void abstractMethod();
}
以下是MyAbstractClass的示例子类:
public class MySubClass extends MyAbstractClass {
public void abstractMethod() {
System.out.println("My method implementation");
}
}
答案 5 :(得分:0)
接口就像一个不提供任何功能的抽象。因此,它不是“实现”,而是扩展了其他抽象或接口。
答案 6 :(得分:-5)
接口是包含一个无法创建任何对象的抽象方法的类。由于接口无法创建对象而不是纯类,因此无需实现它。