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
}