java中的接口与继承

java中的接口与继承,java,inheritance,interface,Java,Inheritance,Interface,我有一个问题是如何将接口与继承联系起来,例如: 如果类A实现了接口X,那么类A也是类B和类C的超类,我的问题是,这是否意味着类B和类C也将自动实现接口X?不需要实现超类中的函数 假设 interface X(){ function A(); function B(); } class A implements X(){ @override function A(){ //do something } function B(){ //do something } } class

我有一个问题是如何将接口与继承联系起来,例如:


如果类A实现了接口X,那么类A也是类B和类C的超类,我的问题是,这是否意味着类B和类C也将自动实现接口X?

不需要实现超类中的函数

假设

interface X(){

function A();


function B();

}

class A implements X(){
@override
function A(){
//do something
}

function B(){
//do something
}

}


class B extends A{


}
class C extends A{

}  //-> that time your subclass need to implement the functions.

不是真的。如果超类不是完全抽象的类,则不必在子类中实现super类中的所有方法。但super类中的所有属性都将继承到子类。

这取决于类A是否为抽象类。假设类A完全实现了接口X,那么B和C都将实现X

X one = new A();
X two = new B();
X three = new C();
如果类A实现了接口X,那么类A也是类B和类C的超类,我的问题是,这是否意味着类B和类C也会自动实现接口X

如果有实现,则不会。否则,是的,他们需要这样做

public interface X{ public void stuff();} 

public class A implements X { 
   // A not abstract, must implement "stuff()" 
   // therefore, B and C will automatically have an implementation of "stuff()" too
}
但是如果A是抽象的

public abstract A implements X {
    // not implemented.  B and C will need to implement
    public abstract void stuff(); // not implemented 
}

如果
X
是接口,
A
是实现(不是抽象类)。不管层次结构中的任何其他类,类A都需要实现其所有方法

如果
X
是一个抽象类,那么类
B
和类
C
都应该提供类
A
中未提供的方法的实现

在这两种情况下,类
B
和类
C
都是接口
X
X:是接口的实现

A:实现X的具体类

B:A级混凝土

C:延伸至A的混凝土等级

如果一个类实现了一个类:这意味着实现类必须从接口实现(即定义所有方法)

如果一个类扩展了一个类:这意味着父类中的所有方法都可以在子类中使用,除非子类重写了这些方法

现在我们得出结论,因为B,C扩展了A中的所有方法,A实现了X中的所有方法,所以B,C都在A中实现了接口X中的方法


但我们不能说B,C实现了X,因为B,C没有从接口实现所有方法的约束,但类A必须实现所有方法

是的。多态性意味着B和C可以用来代替A,所以如果A实现了X,B和C也必须(隐式地)实现。如果我创建了一个类
MySpecialHashMap扩展了HashMap
,您会期望该类是
Map
?当然你会,因为
HashMap
是一个
Map
。嗨,Nambi,谢谢你的帖子,但我的问题实际上是关于类B和类C扩展类a,类a实现接口X,那么类B和类C是否自动实现接口X?@peiwang:Jeff Richley回答了你上面的问题(同样正确,与Ruchira和Nambi相反)。那么类B和类C都实现了函数A和B对吗?类B和C是否必须包含函数A和B?@peiwang如果您的超类A扩展了接口x,则子类B和C是实现该函数所必需的。@peiwang B和C都继承了方法A()和B()(假设它们在A类中不是抽象的)因此B类和C类都实现了X。如果你喜欢答案,习惯上会投票B和C是X的实现,不管你是否必须显式地实现这些方法。
但我们不能说B和C实现X这是完全错误的。它们确实有一个约束来实现接口中的所有方法。这些方法恰好是由父级实现的,但在抽象类的例子。B,C是X的实现,但它们没有实现X,它们从AIf中得到继承的方法B是X的实现,然后B实现X。我不知道你为什么要无中生有地发明自己的术语。如果我们区分“实现”和“实现”,然后一切都会变得混乱。现在很简单。ohk让我重新考虑一下,需要一些时间嗨,如果在接口X中有一个名为M的方法,类a实现了方法M,我能理解为类B和类C从类a继承了方法M吗?因为接口X和类B&C之间没有显式的关系,所以我会认为类B和类C从类A继承方法M,而不是从接口X实现方法M
public abstract A implements X {
    // not implemented.  B and C will need to implement
    public abstract void stuff(); // not implemented 
}