更好地理解接口

时间:2014-02-15 20:25:30

标签: java interface

当我看到这里的问题的许多界面答案,以及谷歌和这个视频课程教程时,我看到我有一个问题。我在这里问,因为如果我的名声不高,我无法评论,所以希望这不是多余的。我理解接口就像psuedocode,但更多的实际方法是将psuedocode实现到程序中。我不知道

public Interface someInterface{ 
   public void doSomething();  
}

就像说我们在程序中需要这个功能,所以当我们这样做时,让我们创建这个接口

public class imDoingSomething implements someInterface{ // looking at the implements someInterface
   @Override  // optional 
  public void doSomething(){

    System.out.println("Doing Something");
  }
}

它确保在我编写程序时我不会忘记编写此函数,因为它对我的程序至关重要。这是对的吗?

4 个答案:

答案 0 :(得分:1)

如果从消费者的角度看待接口,当你有一个使用其他对象的类并且不关心如何具体定义这些对象但只关注这些对象的行为的情况时,它会更容易,一个人创建一个提供方法并在内部使用它的接口 - 每个想要使用这个特定类的人都必须通过实现接口来提供对他的数据的访问,以便类知道如何访问代码级别的所有内容。

答案 1 :(得分:1)

在您的示例中,您正确implemented一个界面。接口可以视为类必须满足的合同。知道该类已满足接口指定的要求,允许该对象通过客户端代码用作接口类型,并保证具有指定签名的特定方法。这可以使代码更加抽象,并可以重用于各种类型。

因此,如果我们有一个接口Playable

public interface Play{
   public void play();
}

实现Playable的两个类:

public class Record implements Playable{
   public void play(){
       System.out.println("Playing Record");
   }
}

public class MP3 implements Playable{
   public void play(){
       System.out.println("Playing MP3");
   }
}

客户端可以以抽象的方式使用它们,因为它知道实现Playable的所有类都有play方法:

public class Application{

    List<Playable> audioFiles = new ArrayList<Playable>();

    public static void main(String[] args){

        audioFiles.add(new Record());
        audioFiles.add(new MP3());

        for(Playable p: audioFiles){
            play(p);
        }
    }

    public static void play(Playable playable){
        playable.play();
    }
}

旁注

创建类或接口时遵循Java命名标准。在Java中,这些类型对名称中的每个单词使用大写字母。因此,您的示例将具有SomeInterface接口和ImDoingSomething类。

答案 2 :(得分:0)

interfaceabstract methods [无定义]的集合。类实现了一个接口,从而继承了接口的抽象方法。通过接口,所有字段都自动为public,static和final,并且您声明或定义的所有方法(作为默认方法)都是公共的。

您无法实例化接口 - 您可以实例化其子类/实现者之一。

这种事情的例子在使用Java Collections时是典型的。

List<String> stringList = new ArrayList<String>();

列表是接口,但实例本身是一个ArrayList

答案 3 :(得分:0)

接口是一种强制执行设计限制的方法。通过将变量或参数的类型声明为接口,您可以确保该变量或参数引用的实例将具有接口的每个方法的实现。这是多态性的基础。