在类中使用接口类型

时间:2018-01-24 07:05:18

标签: java class interface

我正在努力理解这个概念。使用Path的类方法创建Paths类型。

我有两个疑问:

  1. 我们如何在类中创建Path类型而不在类中使用任何Path接口引用(例如,实现)。
  2. 代码段:

     Path dir = Paths.get(args[dirArg]);
    

    我找到此代码段的类,没有Interface Path的实现。

    课程中导入的包:

    import java.nio.file.*;
    import static java.nio.file.StandardWatchEventKinds.*;
    import static java.nio.file.LinkOption.*;
    import java.nio.file.attribute.*;
    import java.io.*;
    import java.util.*;
    
    1. 在课堂上我们如何创建一个返回Interface类型的方法。对于ex Paths的类get方法。在Paths类中,没有连接到Path接口的链接。那么它如何在Java中定义?我怎么能理解这个?
    2. 请对我说些什么......!

2 个答案:

答案 0 :(得分:0)

您调用的get方法将创建(并返回)您的接口实现。

假设您有一个界面Action

public interface Action {
  void doSomething();
}

你接到电话:

Action action = X.getAction();

使用以下X-class:

public class X {

  public Action getAction() {
      return new Action() {
          public void doSomething() {
              System.out.println("done");
          };
 }

}

因此,即使没有实现Action的特定类,getAction()方法也会返回一个实现接口的(匿名)类。

如果有一个实现你的接口的类,代码就没那么不同了:那时,getAction()方法可能会返回该类的实例。

答案 1 :(得分:0)

  

我们如何在类中创建Path类型而不在类中创建任何Path接口(例如,实现)。

真正的答案是,你不需要关心。

get方法返回某种实现Path的对象,这是肯定的。而且你不需要知道更多关于什么样的路径的信息。您的所有代码都需要知道它返回Path,故事结束。

从外面你可能看不到实现Path的类,但实际上必须有一个。只是你不知道。

但是,可以获得返回的Path的实际类型。

System.out.println(Paths.get("/Users/").getClass()); // getClass returns the type

这会打印class sun.nio.fs.UnixPath,它似乎不是公共类。

  

在课堂上我们如何创建一个返回Interface类型的方法。对于ex paths的类get方法。在Paths类中,没有连接到Path接口的链接。那么它如何在Java中定义?我怎么能理解这个?

您当然可以创建一个具有接口返回类型的方法!

interface MyInterface { ... }

class A implements MyInterface { ... }

class B {
    public static MyInterface myMethod() {
        // obviously you can add more logic than this, this is just an example
        return new A();
    }
}

现在作为该方法的调用者,

 MyInterface i = B.myMethod(); // you don't (need) know what actual type of object "i" is.