我正在尝试使用扩展关键字代替实现来使用接口,这在 java 中是否可行。
Interface myinterface
{
//methods
}
public class myclass extends myinterface
{
//methods
}
告诉我这两个词的目的是扩展和实现。为什么类不使用实现关键字从其他类继承类
接口不能扩展,只能实现。接口只能包含常量、方法签名和嵌套类型。也就是说,它们仅代表模型的抽象,或者可以简单地包含常量列表。
接口支持继承。你可以有例如:
public interface InterfaceA extends InterfaceB
如果您真的想从一个类扩展并拥有一些抽象方法,您可以使用抽象类:
public abstract class AbstractA {
public abstract void myAbstractMethod;
}
public class A extends AbstractA {
@Override
public abstract void myAbstractMethod {
// your code
}
}
想一想这两个词以及它们在告诉你什么。
实施 - 意味着将某事付诸实施。接口通常被定义为类必须具有或实现的方法的约定。从本质上讲,您正在使该合同生效。
Extends - 意味着延长。通过扩展类,您基本上可以通过包含扩展类的所有方法来使其更长。
根据定义,两个不同的词在代码中为您提供了两种不同的能力。
类不能扩展Interface
. 他们只能实施它们。只有 anInterface
可以扩展另一个Interface
,就像只有 aClass
可以扩展另一个一样Class
。
告诉我这两个词的目的是扩展和实现。
当一个类extends
从它扩展的类继承属性和行为,即方法时。一个类只能从一个类扩展,因为Java 不支持多重继承。
当一个类implements
提供行为时,即在它实现中定义为存根(只是没有代码的签名)的方法的Interface
实现。然而,一个类可以实现多个接口。
当一个Interface
扩展另一个时,Interface
它只需将更多方法添加到Class
实现它需要为其提供实现的方法列表中。
不,您必须使用implements
接口。
abstract class
但是,如果您绝对需要使用扩展,您可以创建一个。
extends
正如其他人,最简洁的@Stefan Beike 所说:不,当你的意思时你不能使用implements
。如果需要,您可以做的是在implements
您的接口和该类之间添加一个中间抽象extend
类。有时这是通过接口方法的空实现来完成的,然后您只需要覆盖子类中感兴趣的方法。但是,如果您只想使用原本需要的extends
地方,它可以是一个纯粹的抽象类implements
。
扩展 - 被一个类用于扩展另一个类的某些特性,以便可以重用相同的方法或字段。基本示例可以是:
class Animal
{
private String name;
public void setName(String name)
{
this.name = name;
}
public int getLegs()
{
return 2;
}
}
class Elephant extends Animal
{
public int getLegs()
{
return 4;
}
}
现在,setter 被重用,extends 并没有强制它被覆盖,但根据要求,任何方法也可以被覆盖,在我们的例子中是 getter。
实现 - 一个类可以实现一个接口。这有助于实现抽象。接口中的任何方法都需要由实现该接口的任何类来实现。它是强制性的,直到或除非类是抽象的,在这种情况下,任何其他具体类都应该实现未实现的方法。
因此,一个类可以扩展其他类以重用功能,并且一个类可以实现一个接口来强制执行一个类必须自己提供的某些功能。
现在,为什么接口扩展接口,我也不确定,可能是因为子接口将扩展超接口的方法,它会在实现子接口的类上强制实现超接口中的方法。由于超接口不对子接口强制实现,所以不能使用实现。
我希望我很清楚。
类扩展类(正确)
类扩展接口(不正确)=> 类实现接口(正确)
接口扩展接口(正确)
接口扩展类(不正确)(永远不可能)