如何正确处理不同包中的java接口?

如何正确处理不同包中的java接口?,java,interface,Java,Interface,我是Java新手,我有一个接口包。对于接口声明中使用的类型,每个接口都有许多导入 // MyInterface.java... package a.b.c.interfaces; import java.math.BigDecimal; import java.util.List; import java.util.Set; public interface MyInterface() { ... 然后我得到了一个包含模型的包,在其中,我试图创建一个实现MyInterface()的类 我

我是Java新手,我有一个接口包。对于接口声明中使用的类型,每个接口都有许多导入

// MyInterface.java...

package a.b.c.interfaces;

import java.math.BigDecimal;
import java.util.List;
import java.util.Set;

public interface MyInterface() { ...
然后我得到了一个包含模型的包,在其中,我试图创建一个实现
MyInterface()
的类

我有两个问题:

  • 是否需要将
    MyInterface()
    导入到
    MyImplementation()
    ?如果没有,是否需要链接 在编译过程中手动执行
  • 如果导入了
    MyInterface()
    ,则 还需要导入接口所需的类型,或者 导入
    MyInterface.java
    是否解决了这个问题

  • 对于第一个问题,您必须导入接口,并在类上实现接口

    至于第二个问题,您只需要导入
    MyInterface
    。JVM将处理其余的部分

    我强烈建议你放弃oops的概念,因为这是一个太基本的问题


    也可以使用任何像Eclipse这样的IDE。

    Java导入基本上是告诉编译器,当您编写
    MyInterface
    时,您真正的意思是
    a.b.c.interfaces.MyInterface
    。当然,不使用导入就可以编写Java代码,但它非常冗长,看起来很凌乱

    您需要导入任何想要使用的类型,这些类型与您正在编写的类或
    java.lang
    中的类不在同一个包中,因此由于
    MyInterface
    位于
    a.b.c.interfaces
    中,而
    a.b.c.model
    中,您需要导入它

    如果要在代码中的任何位置编写其类型,则确实需要导入
    MyInterface
    正在使用的类,而且由于要实现接口,因此需要在方法声明中编写其类型。在Java中,无法使用与另一个类相同的导入

    下面是一个不需要导入类型的示例:

    UsesBigInteger.java:

    import java.math.BigInteger;
    
    public class UsesBigInteger {
        public BigInteger get() {
            return BigInteger.TEN;
        }
    }
    
    Main.java

    public class Main {
         public static void Main(String[] args) {
              UsesBigInteger use = new UsesBigInteger();
              System.out.println(use.get());
         }
    }
    
    import java.math.BigInteger;
    
    public class Main {
         public static void Main(String[] args) {
              UsesBigInteger use = new UsesBigInteger();
              BigInteger it = use.get();
              System.out.println(it);
         }
    }
    
    我们不必在这里导入
    java.math.BigInteger
    的原因是我们从来没有在任何地方实际编写
    BigInteger
    ,因此我们不需要告诉编译器我们的意思-我们只需从
    UsesBigInteger.get()传递返回值
    ,编译器已经知道这是一个
    java.math.biginger

    如果我们想保留对
    biginger
    的引用,我们需要导入它:

    Main.java

    public class Main {
         public static void Main(String[] args) {
              UsesBigInteger use = new UsesBigInteger();
              System.out.println(use.get());
         }
    }
    
    import java.math.BigInteger;
    
    public class Main {
         public static void Main(String[] args) {
              UsesBigInteger use = new UsesBigInteger();
              BigInteger it = use.get();
              System.out.println(it);
         }
    }
    

    你为什么不试试?@ScaryWombat:尝试和错误与接触一个能够提供细节的超级知识社区。我选择了后者。另外,我找不到任何关于跨包接口导入的好的StackOverflow Q。我认为您对Java中“导入”的含义有一个基本的误解。不,如果不需要,您不需要导入接口,而且JVM也不需要处理“其余部分”。导入仅保存键入内容。回答前请仔细阅读问题。他只是想实现一个接口,请澄清这一点,导入只定位您直接给出的文件路径,是的,还有其他JVM需要注意的是您的类对象。。。哪一个类被映射到哪一个接口以及我们可以在ITE中使用什么方法即使您不导入,JVM也会处理同样的事情。因此,这不是JVM负责的导入的“其余部分”。据我所知,导入对编译器来说只是有意义的,而对Java运行时(也称为JVM)则没有意义