请用通俗易懂的语言或文章链接进行解释。
当前回答
当子类扩展一个类时,它允许子类继承(重用)和重写在父类型中定义的代码。当类实现接口时,它允许在任何期望接口值的上下文中使用从该类创建的对象。
这里真正的问题是,当我们实现任何东西时,这仅仅意味着我们在使用这些方法。它们的值和返回类型没有任何变化的余地。
但是当我们扩展任何东西时,它就变成了类的扩展。您可以更改它,使用它,重用它,它不一定需要返回与在超类中相同的值。
其他回答
扩展:用于将父类的属性获取到子类中,并且可能包含已定义的方法,这些方法可以在子类中重写。
Implements:这用于通过在子类中定义接口来实现接口(仅具有函数签名而不具有函数定义的父类)。
有一个特殊的条件:“如果我希望一个新接口成为现有接口的子接口怎么办?”。在上述条件下,子接口扩展父接口。
实现用于接口,扩展用于扩展类。
为了用更简单的术语使它更清晰,界面就像它的声音——一个界面——一个模型,你需要应用它,跟随它,以及你的想法。
Extend用于类,在这里,您通过添加更多功能来扩展已经存在的内容。
还有一些注意事项:
一个接口可以扩展另一个接口。
当您需要为特定场景在实现接口或扩展类之间进行选择时,就开始实现接口。因为一个类可以实现多个接口,但只能扩展一个类。
延伸
类只扩展一个类接口扩展了一个或多个接口
工具
类实现一个或多个接口接口“不能”实现任何内容
抽象类也像类一样,具有扩展和实现
extends用于扩展类。
implements用于实现接口
接口和常规类之间的区别在于,在接口中不能实现任何声明的方法。只有“实现”接口的类才能实现方法。C++等价的接口将是一个抽象类(不完全相同,但几乎相同)。
此外,java不支持类的多重继承。这通过使用多个接口来解决。
public interface ExampleInterface {
public void doAction();
public String doThis(int number);
}
public class sub implements ExampleInterface {
public void doAction() {
//specify what must happen
}
public String doThis(int number) {
//specfiy what must happen
}
}
现在扩展类
public class SuperClass {
public int getNb() {
//specify what must happen
return 1;
}
public int getNb2() {
//specify what must happen
return 2;
}
}
public class SubClass extends SuperClass {
//you can override the implementation
@Override
public int getNb2() {
return 3;
}
}
在这种情况下
Subclass s = new SubClass();
s.getNb(); //returns 1
s.getNb2(); //returns 3
SuperClass sup = new SuperClass();
sup.getNb(); //returns 1
sup.getNb2(); //returns 2
此外,请注意,实现接口不需要@Override标记,因为原始接口方法中没有任何内容需要重写
我建议您对面向对象编程中的动态绑定、多态性和一般继承进行更多研究
界面是一个对象可以做的动作的描述…例如,当你拨动一个灯开关,灯亮了,你不在乎怎么做,只是它做了。在面向对象编程中,接口是一个对象为了成为“X”而必须具有的所有功能的描述。同样,作为一个例子,任何“像”灯光的东西都应该有turn_on()方法和turn_off()方法。接口的目的是让计算机强制执行这些财产,并知道TYPE T的对象(无论接口是什么)必须具有名为X、Y、Z等的函数。
接口是一种编程结构/语法,允许计算机在对象(类)上强制执行某些财产。例如,假设我们有汽车类、滑板车类和卡车类。这三个类中的每一个都应该有一个start_engine()操作。每个车辆的“引擎如何启动”取决于每个特定的类,但它们必须有一个start_engine动作这一事实是接口的领域。
推荐文章
- 在流中使用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