请用通俗易懂的语言或文章链接进行解释。
当前回答
实现用于接口,扩展用于扩展类。
为了用更简单的术语使它更清晰,界面就像它的声音——一个界面——一个模型,你需要应用它,跟随它,以及你的想法。
Extend用于类,在这里,您通过添加更多功能来扩展已经存在的内容。
还有一些注意事项:
一个接口可以扩展另一个接口。
当您需要为特定场景在实现接口或扩展类之间进行选择时,就开始实现接口。因为一个类可以实现多个接口,但只能扩展一个类。
其他回答
扩展:用于将父类的属性获取到子类中,并且可能包含已定义的方法,这些方法可以在子类中重写。
Implements:这用于通过在子类中定义接口来实现接口(仅具有函数签名而不具有函数定义的父类)。
有一个特殊的条件:“如果我希望一个新接口成为现有接口的子接口怎么办?”。在上述条件下,子接口扩展父接口。
我注意到你的个人资料中有一些C++问题。如果您理解C++的多重继承(指从多个其他类继承特性的类)的概念,Java不允许这样做,但它确实有关键字接口,这有点像C++中的纯虚拟类。正如很多人所提到的,你扩展了一个类(而且你只能从一个类扩展),你实现了一个接口——但是你的类可以实现任意多的接口。
也就是说,这些关键字及其使用规则描述了Java中多重继承的可能性(只能有一个超级类,但可以实现多个接口)。
只有当子类想要使用SuperClass中已经声明的某些功能(方法或实例变量),或者我想要稍微修改SuperClass的功能(方法重写)时,我们才使用SubClass扩展SuperClass。但是,比方说,我有一个Animal类(SuperClass)和一个Dog类(SubClass),我在Animal中定义的方法很少,例如doEat(),doSleep()。。。以及更多。
现在,我的狗类可以简单地扩展Animal类,如果我希望我的狗使用Animal中声明的任何方法,我可以通过创建一个狗对象来调用这些方法。这样我就可以保证我有一只能吃能睡的狗,可以做我想让狗做的任何事情。
现在,想象一下,有一天,一个爱猫的人来到我们的工作场所,她试图扩展动物课程(猫也吃也睡)。她创建了一个Cat对象并开始调用这些方法。
但是,比方说,有人试图成为Animal类的对象。你可以分辨猫是如何睡觉的,你可以分辨狗是如何进食的,你也可以分辨大象是如何喝水的。但它在制作Animal类的对象时没有任何意义。因为这是一个模板,我们不想要任何一般的饮食方式。
因此,我更倾向于创建一个抽象类,没有人可以实例化,但可以用作其他类的模板。
总之,Interface只是一个抽象类(纯抽象类),它不包含方法实现,只包含定义(模板)。因此,实现接口的人只知道他们有doEat()的模板;和doSleep();但他们必须定义自己的doEat();和doSleep();方法。
只有当您想要重用SuperClass的某些部分时(但请记住,您始终可以根据需要重写SuperClass的方法),才可以进行扩展,并且当您需要模板并且希望自己定义模板时(根据需要),才可实现。
我将与您分享一段代码:您可以尝试使用不同的输入集并查看结果。
class AnimalClass {
public void doEat() {
System.out.println("Animal Eating...");
}
public void sleep() {
System.out.println("Animal Sleeping...");
}
}
public class Dog extends AnimalClass implements AnimalInterface, Herbi{
public static void main(String[] args) {
AnimalInterface a = new Dog();
Dog obj = new Dog();
obj.doEat();
a.eating();
obj.eating();
obj.herbiEating();
}
public void doEat() {
System.out.println("Dog eating...");
}
@Override
public void eating() {
System.out.println("Eating through an interface...");
// TODO Auto-generated method stub
}
@Override
public void herbiEating() {
System.out.println("Herbi eating through an interface...");
// TODO Auto-generated method stub
}
}
定义的接口:
public interface AnimalInterface {
public void eating();
}
interface Herbi {
public void herbiEating();
}
类和接口都是契约。它们提供应用程序其他部分所依赖的方法和财产。
当您对本合同的实现细节不感兴趣时,可以定义一个接口。唯一需要关心的是契约(接口)是否存在。
在这种情况下,您可以让实现接口的类来关注合同如何履行的细节。只有类才能实现接口。
extends用于替换现有合同的详细信息。通过这种方式,您可以用不同的方式取代一种履行合同的方式。类可以扩展其他类,接口可以扩展其他接口。
在Java中,类(子类)扩展了另一个类(超级类),并可以覆盖超级类中定义的方法。
当一个类试图声明接口中定义的方法时,使用implements。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap