Java实例与抽象类和方法

时间:2014-01-25 11:17:30

标签: java oop interface polymorphism abstract-class

我是Java的新手,并且一直在阅读其主要主题。我最近介绍了抽象类和实例。我已经阅读了他们的定义,所以它不是我想要的定义。

我需要帮助理解为什么我需要使用接口。我在网上看到的java教程界面的所有例子似乎都可以用抽象的类/方法组合来实现。

是否存在一个常见的场景,其中只有一个接口可用于解决问题,而抽象类/方法的组合不会?

4 个答案:

答案 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类。

从链接中可以看出,它实现了ListDeque接口(以及其他一些接口),允许在需要时使用它。仅使用抽象类是不可能的。

答案 2 :(得分:1)

主要区别在于您只能扩展一个类,但可以实现多个接口。

如果您希望(例如)实现侦听器同时扩展另一个类,这可能很重要。请注意,在许多情况下,最好使用匿名内部类来进行聆听。

答案 3 :(得分:0)

Java不支持polymorphic继承 - 一个类可以extend多个类。这个选择是为了避免与分层冲突解决相关的问题(两个父类中都存在一个方法 - 您使用哪一个?)。简单来说,在java中只能有一个“是一种”关系。

然而,为了允许一种形式的多态性,引入了接口。这些是空洞模板,类必须为其提供实现,并提供创建“看起来像”关系的方法。虽然只允许对象“成为”一个(父)类的实例,但它可能“看起来”任意数量的接口。

通过从接口中继承,它允许处理交叉概念 - 即,完全不同的继承结构的类可能仍然共享一些抽象相似性。 JDK的一个很好的例子是Serializable,它是一个标记接口(没有方法的接口)。实际上,任何类都可以进行序列化,但实际上所有可序列化的类都不共享任何继承层次结构。这个概念不能用抽象类来处理 - 你必须走出类层次结构来实现它 - 即接口是唯一的方法。