我是Java的新手,并且一直在阅读其主要主题。我最近介绍了抽象类和实例。我已经阅读了他们的定义,所以它不是我想要的定义。
我需要帮助理解为什么我需要使用接口。我在网上看到的java教程界面的所有例子似乎都可以用抽象的类/方法组合来实现。
是否存在一个常见的场景,其中只有一个接口可用于解决问题,而抽象类/方法的组合不会?
答案 0 :(得分:2)
界面定义了新辅助 Java中的数据类型。 它(界面)是一组最终变量 和抽象方法仅限。
界面的成员是“public” 通过默认。事实上私人和受保护 接口中不允许使用修饰符。
界面仅为参考类型 无法创建其对象。
接口可以继承另一个接口 但不能继承任何类。
类不能继承任何接口 它(一个类)可以实现零到多 接口
如果类实现接口那么 1)它必须覆盖所有的摘要 所有已实现接口的方法。
2)在两者之间创建类型兼容性 界面和类。它允许一个 接口引用可以引用对象 实施课程。
interface Iface
{
int x = 3;//final and public by default
void f();//abstract and public by default
}
interface AnotherI extends Iface
{
//more declarations possible here
}
class InterfaceDemo implements Iface
{
public void f()
{
int i;
for(i =0 ; i< x; i++)
System.out.println("Interfaces are widely used");
}
public static void main(String args[])
{
Iface ref = new InterfaceDemo();
ref.f();//allowed
//ref.newMethodsOfClass();//not allowed
}
}
答案 1 :(得分:2)
Java API的一个很好的例子是LinkedList
类。
从链接中可以看出,它实现了List
和Deque
接口(以及其他一些接口),允许在需要时使用它。仅使用抽象类是不可能的。
答案 2 :(得分:1)
主要区别在于您只能扩展一个类,但可以实现多个接口。
如果您希望(例如)实现侦听器同时扩展另一个类,这可能很重要。请注意,在许多情况下,最好使用匿名内部类来进行聆听。
答案 3 :(得分:0)
Java不支持polymorphic继承 - 一个类可以extend
多个类。这个选择是为了避免与分层冲突解决相关的问题(两个父类中都存在一个方法 - 您使用哪一个?)。简单来说,在java中只能有一个“是一种”关系。
然而,为了允许一种形式的多态性,引入了接口。这些是空洞模板,类必须为其提供实现,并提供创建“看起来像”关系的方法。虽然只允许对象“成为”一个(父)类的实例,但它可能“看起来”任意数量的接口。
通过从接口中继承,它允许处理交叉概念 - 即,完全不同的继承结构的类可能仍然共享一些抽象相似性。 JDK的一个很好的例子是Serializable
,它是一个标记接口(没有方法的接口)。实际上,任何类都可以进行序列化,但实际上所有可序列化的类都不共享任何继承层次结构。这个概念不能用抽象类来处理 - 你必须走出类层次结构来实现它 - 即接口是唯一的方法。